1

如何从同一个包中的函数访问包变量?

以下代码仅对x函数进行本地更改。我怎样才能改变myPackage::x那个功能?

例子:

x <- list()
populate_list <- function() {
    x["a"] <- 4
}

--

这是我用来测试的完整代码getcache每次运行包时,只需选择不同的密钥即可。这是包代码,在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
4

2 回答 2

2

操作员在父环境中<<-搜索现有定义,所以下面给出了我想要的:

x <- list()
populate_list <- function() {
    x["a"] <<- 4
}

或者对于另一个例子:

cache <- list()
test_cache <- function(){
    cache[[paste(sample.int(10),collapse="-")]] <<- 1
    return(cache)
}
于 2012-11-19T15:26:38.913 回答
0

看一下get方法。它允许您直接从特定环境中提取变量,而不是依赖于当前方法的词法范围。

环境的文档应该有助于使这个论点更加清晰,尽管在不了解场景的情况下很难识别确切的语法。

一般来说,如果您知道您希望在全局范围内访问它们,那么通过在本地范围内定义变量来隐藏它们并不是一个好主意。

于 2012-11-19T12:49:04.687 回答