2012-09-19 63 views
5

在下面的代碼,字母和字母是全球性的,或在全局搜索路徑和可到達通過另一包(同一件事!)爲什麼R中的ls()不顯示全局變量?

> 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) 
> 

+0

哇,今天很多R程序員在野外。 :-) – mda

+4

請注意,這些是** not ** global,只是**從'base'命名空間導出**,因此可從全局工作空間訪問。 –

+0

Hrmmm ...所有語言都認爲出口不可見......我想不是......考慮bash。所以在一般的compsci理論定義中是「全局的」。當然R有特定的R術語。我想學習它。 :-) – mda

回答

11

出於同樣的原因,它不列出所有附加軟件包的所有導出的函數(從?ls):

默認情況下,調用「LS」或「對象」的環境用過的。

指定包含LETTERSls的環境將打印它的名稱。

# LETTERS is in there somewhere... 
sapply(search(),ls) 
3

因爲它們是內置的數據對象。做一個正常的分配到一個正常的變量,你會看到它:

R> myLETTERS <- LETTERS 
R> ls() 
[1] "myLETTERS" 
R> 

運行

R> data() 

顯示所有可用的數據集。有關更多信息,請參見help(data),例如,如何查找特定環境中的數據而不是全球數據。

+1

那麼我如何列出內置的? – mda

+0

哦,我剛剛添加了 - 'data()'。 –

+0

data()不包括字母和字母。 :( – mda

6
apropos("letters",where=TRUE) 
     9   9 
"letters" "LETTERS" 

表明它們是在搜索列表,這是9位,

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

base包。

7

如果你讀?LETTERS你會注意到這些是常量而不是數據對象。該頁面還表示這些常量位於base名稱空間中。要列出他們,我們必須告訴ls()在該命名空間看:

> ls(name = "package:base", pattern = "LETTERS") 
[1] "LETTERS" 
> ls(name = "package:base", pattern = "letters") 
[1] "letters" 
+0

良好的領導!:-)在R中可以找到像? Extract和?Constants ....是否有所有頂級元手冊頁(來自基礎包)的列表? – mda

+0

所有的對象都被認爲是「數據」還是常量? Wierd命名... – mda

+2

(數據函數只是加載包中的數據集。)我認爲獾會使R-Core變成在控制檯線上運行'?Constants'。不久之前,儘管幫助頁面被稱爲「常量」,該搜索將不會成功。 「Extract」一直有效。另一個很好用的元搜索是「設備」。有人可能會構建一個幫助頁面標題的列表,這些標題也不是函數名稱,但它高於我的薪酬等級。 –

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" 

如果你這樣做有一個新的會話,你不會得到儘可能多的」 .Depends」。其他許多內建的不出現在這裏,但「PI」缺少,因爲它的字符模式不是如果你在我的機器上尋找「PI」它的位置是25,直到你使用搜索(),這是不是非常有意義的。

> 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"  

所以所有這些軟件包都有一些以pi爲開頭的對象(主要是函數),數字的位置會隨着被加載的軟件包數量而變化,因爲最近加載的軟件包數量較少會推動搜索位置o f「基數」更高。

相關問題