首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从函数中访问包变量?

如何从函数中访问包变量?
EN

Stack Overflow用户
提问于 2012-11-19 20:36:23
回答 2查看 1.1K关注 0票数 1

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

下面的代码只在本地更改函数的x。如何从该函数更改myPackage::x

示例:

代码语言:javascript
复制
x <- list()
populate_list <- function() {
    x["a"] <- 4
}

--

下面是我用来用get进行测试的完整代码。每次运行包时,只需选择不同的cache密钥即可。这是R/get_obj.R格式的软件包代码

代码语言:javascript
复制
cache <- list()
test_cache <- function(){
    cache <- get("cache")
    cache[[paste(sample.int(10),collapse="-")]] <- 1
    return(cache)
}

我用以下命令在R中测试它:

代码语言:javascript
复制
> 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(),我希望输出如下列表:

代码语言:javascript
复制
$`4-1-6-5-9-3-10-2-7-8`
[1] 1

$`6-9-7-10-5-1-4-2-3-8`
[1] 1
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-19 23:26:39

<<-运算符在父环境中搜索现有的定义,因此下面的代码给出了我想要的:

代码语言:javascript
复制
x <- list()
populate_list <- function() {
    x["a"] <<- 4
}

或者举另一个例子:

代码语言:javascript
复制
cache <- list()
test_cache <- function(){
    cache[[paste(sample.int(10),collapse="-")]] <<- 1
    return(cache)
}
票数 2
EN

Stack Overflow用户

发布于 2012-11-19 20:49:05

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

environments的文档应该有助于使这一论点变得更加清晰,尽管在不了解场景的情况下很难确定确切的语法。

通常,如果您知道要更全局地访问变量,那么通过在局部范围内定义变量来隐藏变量并不是一个好主意。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13453969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档