为什么R中的ls()不显示全局变量?

mda*_*mda 5 scope namespaces r global-variables libraries

在下面的代码中,LETTERS和字母是全局的,或者在全局搜索路径中,并且可以通过另一个包来访问(同样的事情!)

> LETTERS
 [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S"
[20] "T" "U" "V" "W" "X" "Y" "Z"
> letters
 [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s"
[20] "t" "u" "v" "w" "x" "y" "z"
> ls()
character(0)
> a <- "1 2 3"
> ls()
[1] "a"
> rm(a)
> ls()
character(0)
> 

Jos*_*ich 11

出于同样的原因,它没有列出所有附加包中的所有导出函数(from ?ls):

默认情况下,使用"ls"或"objects"调用的环境.

指定包含的环境LETTERSls打印其名称.

# LETTERS is in there somewhere...
sapply(search(),ls)
Run Code Online (Sandbox Code Playgroud)


Rei*_*son 7

如果您阅读,?LETTERS您将注意到这些是常量而不是数据对象.该页面还表明这些常量位于base命名空间中.要列出它们,我们必须告诉ls()它查看该命名空间:

> ls(name = "package:base", pattern = "LETTERS")
[1] "LETTERS"
> ls(name = "package:base", pattern = "letters")
[1] "letters"
Run Code Online (Sandbox Code Playgroud)

  • (`data`函数只是从包中加载数据集.)我认为将badgering R-Core转化为使``Constants`在控制台行工作.不久前,尽管帮助页面被称为"常数",但搜索不会成功.`?Extract`一直有效.另一个很有用的元搜索是"?Devices".有人可能会构建一个帮助页面标题列表,这些标题不是函数名称,但它高于我的工资等级. (2认同)

Jam*_*mes 6

apropos("letters",where=TRUE)
        9         9 
"letters" "LETTERS" 
Run Code Online (Sandbox Code Playgroud)

表示它们位于搜索列表中的第9位,即

search()
[1] ".GlobalEnv"        "package:stats"     "package:graphics" 
[4] "package:grDevices" "package:utils"     "package:datasets" 
[7] "package:methods"   "Autoloads"         "package:base"
Run Code Online (Sandbox Code Playgroud)

base软件包.


42-*_*42- 6

如果您想要查看特定模式的对象并考虑到正则表达式搜索模式,您可以继续探索apropos.我有点紧张我会发现多少,所以我首先检查了这个努力的长度,只有30个.这是我工作区中的所有角色向量.请注意,"字母"和"字母"都显示出来.

apropos(what="^", mode="character")
 [1] ".Depends"             ".Depends"             ".Depends"             ".Depends"            
 [5] ".Depends"             ".Depends"             ".Depends"             ".Depends"            
 [9] ".Depends"             ".Depends"             ".Depends"             ".Depends"            
[13] ".Device"              ".Firstlib_as_onLoad"  ".knownS3Generics"     ".Library"            
[17] ".Library.site"        ".S3PrimitiveGenerics" "blues9"               "letters"             
[21] "LETTERS"              "month.abb"            "month.name"           "p.adjust.methods"    
[25] "R.version.string"     "sas.get.macro"        "state.abb"            "state.name"          
[29] "tm"   
Run Code Online (Sandbox Code Playgroud)

如果你用新的会话做到这一点,你就不会得到那么多".Depends".许多其他内置插件确实出现在这里,但"pi"缺失,因为它不是字符模式.如果你在我的机器上寻找"pi",它的位置是25,这在你使用search()之前没有意义:

> search()[as.numeric(names(apropos(what="^pi", mode="numeric",where=1)))]
[1] "package:base"
# Removing the numeric restriction
> search()[as.numeric(names(apropos(what="^pi",where=1)))]
 [1] "package:base"      "package:utils"     "package:lubridate" "package:grDevices" "package:graphics" 
 [6] "package:graphics"  "package:MASS"      "package:MASS"      "package:MASS"      "package:base"     
Run Code Online (Sandbox Code Playgroud)

因此,所有这些包都有一些以"pi"开头的对象(主要是函数).数字位置将随着加载的包的数量而变化,因为最近加载的具有较低数字的包将推动"基础"的搜索位置更高.