如何从同一个包中的函数访问包变量?
下面的代码只在本地更改函数的x。如何从该函数更改myPackage::x?
示例:
x <- list()
populate_list <- function() {
x["a"] <- 4
}--
下面是我用来用get进行测试的完整代码。每次运行包时,只需选择不同的cache密钥即可。这是R/get_obj.R格式的软件包代码
cache <- list()
test_cache <- function(){
cache <- get("cache")
cache[[paste(sample.int(10),collapse="-")]] <- 1
return(cache)
}我用以下命令在R中测试它:
> library(devtools)
> load_all("mypackage")
Loading mypackage
> mypackage::test_cache()
$`4-1-6-5-9-3-10-2-7-8`
[1] 1
> mypackage::test_cache()
$`6-9-7-10-5-1-4-2-3-8`
[1] 1
> mypackage::cache
list()对于mypackage::cache和第二次运行mypackage::test_cache(),我希望输出如下列表:
$`4-1-6-5-9-3-10-2-7-8`
[1] 1
$`6-9-7-10-5-1-4-2-3-8`
[1] 1发布于 2012-11-19 23:26:39
<<-运算符在父环境中搜索现有的定义,因此下面的代码给出了我想要的:
x <- list()
populate_list <- function() {
x["a"] <<- 4
}或者举另一个例子:
cache <- list()
test_cache <- function(){
cache[[paste(sample.int(10),collapse="-")]] <<- 1
return(cache)
}发布于 2012-11-19 20:49:05
看一看get method。它允许您直接从特定环境中提取变量,而不是依赖于当前方法的词法作用域。
environments的文档应该有助于使这一论点变得更加清晰,尽管在不了解场景的情况下很难确定确切的语法。
通常,如果您知道要更全局地访问变量,那么通过在局部范围内定义变量来隐藏变量并不是一个好主意。
https://stackoverflow.com/questions/13453969
复制相似问题