2012-09-19 10 views
5

Nel codice di seguito, le lettere e le lettere sono globali, o nel percorso di ricerca globale e raggiungibile attraverso un altro pacchetto (stessa cosa!)Perché ls() in R non mostra variabili globali?

> 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

Wow, un sacco di programmatori R in natura oggi. :-) – mda

+4

Si noti che questi sono ** non ** globali, solo ** esportati ** dallo spazio dei nomi 'base' e ​​quindi accessibili dallo spazio di lavoro globale. –

+0

Hrmmm ... Tutte le lingue considerano le esportazioni non visibili ... Penso di no .... considera bash.Quindi "globale" nella definizione teorica generale del compsci. Ovviamente R ha un R lingo specifico. Voglio imparare. :-) – mda

risposta

11

Per lo stesso motivo non elenca tutte le funzioni esportate in tutti i pacchetti collegati (da ?ls):

Per default, l'ambiente della chiamata a 'ls' o 'oggetti' è Usato.

Specificare l'ambiente che contiene LETTERS e ls stamperà il suo nome.

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

Perché sono builtin oggetti dati. Fare un incarico normale a una variabile normale e lo vedrete:

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

Esecuzione

R> data() 

vi mostra tutti i set di dati disponibili. Vedere help(data) per ulteriori informazioni, ad esempio come cercare i dati in ambiti specifici anziché in quello globale.

+1

Quindi come elenco i built-in? – mda

+0

Oh, ho appena aggiunto che - 'data()'. –

+0

data() non include però LETTERE e lettere. :( – mda

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

indica che sono nella posizione 9 nell'elenco di ricerca, che è,

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

pacchetto base.

7

Se si legge ?LETTERS si noterà che queste sono costanti e non oggetti di dati. Quella pagina indica anche che queste costanti si trovano nello spazio dei nomi base. Per elencare li dobbiamo dire ls() a guardare in quel namespace:

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

Buon vantaggio! :-) È divertente in R dove si possono trovare pagine come? Estrai e? Costanti .... c'è un elenco di tutte le meta-manpage di livello superiore (dal pacchetto base)? – mda

+0

Tutti gli oggetti sono considerati "dati" rispetto alle costanti? Nomina Wierd ... – mda

+2

(La funzione 'data' carica solo set di dati dai pacchetti.) Mi rallegro per aver messo l'R-Core in difficoltà nel fare il lavoro di' 'Costanze '' sulla linea della console. Non è passato molto tempo da quando, nonostante la pagina di aiuto fosse intitolata "Costanti", quella ricerca non avrebbe avuto successo. "Estrarre" ha sempre funzionato. Un'altra meta-ricerca che è di buon uso è '? Devices'. Qualcuno potrebbe essere in grado di costruire un elenco di titoli della pagina di aiuto che non erano anche nomi di funzioni, ma è al di sopra del mio grado di paga. –

6

Se volete vedere gli oggetti di una particolare modalità e hanno un modello di ricerca regex in mente, si può andare ad esplorare con apropos. Ero un po 'nervoso su quanto avrei trovato, quindi per prima cosa ho controllato la lunghezza di questo sforzo che era solo 30. Qui ci sono tutti i vettori di personaggi trovati nel mio spazio di lavoro al momento. Si noti che entrambe le "lettere" e lettere "non si presentano.

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" 

Se avete fatto questo con una nuova sessione non si otterrebbe il maggior numero di" .Depends". Molti degli altri built-in appaiono qui, ma "pi" manca perché non è di carattere in modalità Se si va alla ricerca di "pi" nella mia macchina la sua posizione è di 25, che non è molto significativo fino a quando si utilizza di ricerca():.

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

Così tutti questi pacchetti hanno alcuni oggetti (funzioni per lo più) che iniziano con "pi". La posizione numerica varierà con il numero di pacchetti caricati, poiché i pacchetti caricati di recente che hanno un numero inferiore spingeranno la posizione di ricerca o f "base" più alta.