我认为使用完全限定的名称就足以避免用我未明确引入的名称污染我的范围,但是显然,对于R,情况并非如此。

例如,

% R_PROFILE_USER= /usr/bin/R --quiet --no-save --no-restore
> ls(all = TRUE)
character(0)
> load("/home/berriz/_/projects/fda/deseq/.R/data_for_deseq.RData")
> ls(all = TRUE)
[1] "a" "b" "c"
> ?rlog
No documentation for ‘rlog’ in specified packages and libraries:
you could try ‘??rlog’

到现在为止还挺好。特别是,如最后一条命令所示,解释器对rlog一无所知。

但是我跑完之后
> d <- DESeq2::DESeqDataSetFromMatrix(countData = a, colData = b, design = c)

...然后,此后,命令?rlog将为我未明确引入环境(且未使用全限定名引用)的功能生成一个文档页面。

我发现这种行为令人不安。

特别是,我不知道什么时候我明确定义的定义会作为某些看似无关的命令的副作用而被悄无声息地掩盖。

如何控制环境能看到什么?

或者换句话说,如何预防上述副作用?

最佳答案

不确定“范围”在R中的含义与其他语言是否相同。 R使用“环境”(有关详细说明,请参见http://adv-r.had.co.nz/Environments.html)。您在R中的作用域包括所有已加载的环境,并且您已经发现,用户并没有明确控制所有已加载的环境。

例如,

ls()

列出默认环境“.GlobalEnv”中的对象
search()

列出当前加载的环境。
ls(name='package.stats')

在默认的R安装中,“package:stats”是启动时加载的环境之一。

默认情况下,您创建的所有内容都存储在全局环境中。
ls(name='.GlobalEnv')

您可以通过使用$语法引用创建的对象来显式引用创建的对象。
x <- c(1,2,3)
.GlobalEnv$x

关于R如何将范围内的名称限制为我明确创建的名称?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41685025/

10-12 22:26