我在R中创建了2个包。其中一个包中的变量在另一个包的函数中使用。因此,我在全局范围内声明了变量,如 var <<- "value"
。现在所有的函数都可以正常工作。但是这些变量现在对所有人都是可访问的。如果变量的值被任何用户更改,很多函数就无法正常工作。是否可能创建一个变量并仅在特定的包中使用该变量?
options
中,而不是.GlobalEnv
中的变量。您可以将 options
用作键值存储,或者分配例如 list
到一个键(可能是您的软件包名称),就像我在pander package中所做的那样。正如您所看到的,我甚至创建了一些帮助函数来更新/查询这些列表元素。
快速示例:
> options(foo = list(a = pi, b = 1:3))
> getOption('foo')
$a
[1] 3.141593
$b
[1] 1 2 3
> getOption('foo')['a']
$a
[1] 3.141593
url <- "http://mytext.com" file <- "我下载的内容" cacheEnv <- new.env() assign(url, file, envir=cacheEnv) get(url, envir=cacheEnv)- Dinoop Nair
options
中设置的任何内容,但是另一方面,用户可以有意地覆盖R中的任何内容(甚至在包命名空间中 - 这将是一个比某些随机环境更安全的解决方案来存储您的变量)。 - daroczig通过创建新的环境,可以实现这一点。http://digitheadslabnotebook.blogspot.in/2011/06/environments-in-r.html
>cacheEnv <- new.env()
> url <- "http://mytext.com"
> file <- "This is the content I downloaded"
> cacheEnv <- new.env()
> assign(url, file, envir=cacheEnv)
> get(url, envir=cacheEnv)
[1] "This is the content I downloaded"
list
。 - Paul Hiemstra