如何从同一个包中的函数访问包变量?
以下代码仅在本地更改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
答案 0 :(得分:2)
<<-
运算符在父环境中搜索现有定义,因此以下内容为我提供了我想要的内容:
x <- list()
populate_list <- function() {
x["a"] <<- 4
}
或者换另一个例子:
cache <- list()
test_cache <- function(){
cache[[paste(sample.int(10),collapse="-")]] <<- 1
return(cache)
}
答案 1 :(得分:0)
看看get method。它允许您直接从特定环境中提取变量,而不是依赖于当前方法的词法范围。
environments的文档应该有助于使这个论点变得更清楚,尽管在不知道场景的情况下很难识别确切的语法。
一般情况下,如果您知道自己希望更全面地访问变量,那么通过在本地范围内定义变量来隐藏变量并不是一个好主意。