在R中,“通过命名空间加载(而不是附加)”是什么意思?

时间:2013-02-20 19:53:17

标签: r package

在R中,sessionInfo()中的“通过命名空间加载(而非附加)”是什么意思?

修改

例如:

> sessionInfo()

R version 2.15.2 (2012-10-26)
Platform: x86_64-apple-darwin9.8.0/x86_64 (64-bit)

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

---->>>> loaded via a namespace (and not attached):
---->>>> [1] tools_2.15.2

2 个答案:

答案 0 :(得分:16)

这意味着包(在本例中为R)可以访问包函数/对象,但是用户无法在没有显式加载工具包的情况下加载统计数据,图形等并为用户准备好。

以下是一个例子:

sessionInfo()
file_ext("file.com")
tools::file_ext("file.com")
sessionInfo()

答案 1 :(得分:15)

当评估library(foo)时,R首先将包foo加载到内存中,然后将包附加到search()路径。其他操作,例如loadNamespace("foo")foo::fun,或当第三方表明它从foo导入符号时,加载包但不将其附加到搜索路径。由于R是动态语言,因此每个函数调用都涉及遍历可用符号以找到匹配的第一个符号。通过分离附加和加载操作并因此限制要搜索的符号数量,它是有效的,并避免不必要的名称冲突。

在上面的示例中,工具包已加载,但尚未附加。当在R命令提示符下键入符号时,R首先在全局名称空间中查找符号(search()返回的第一个元素,如果未找到,则在search()的后续元素中查找。未附加,工具中的符号未解析。

> file_ext
Error: object 'file_ext' not found

尽管如此,无论工具是否在搜索路径上,都可以使用tools::file_ext访问它们。