2012-09-19 9 views
5

W poniższym kodzie, litery i litery są globalne, albo w globalnej ścieżce wyszukiwania i osiągalny za pośrednictwem innego pakietu (to samo!)Dlaczego ls() w R nie pokazuje zmiennych globalnych?

> 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, wielu programistów R w dzikiej dziś. :-) – mda

+4

Zwróć uwagę, że są one ** nie ** globalne, ** eksportowane ** z przestrzeni nazw 'base', a więc dostępne z globalnego obszaru roboczego. –

+0

Hrmmm ... Czy wszystkie języki uważają, że eksport nie jest widoczny ... Nie sądzę ... bash.Tak "globalny" w ogólnej definicji teoretycznej compsci. Oczywiście R ma określone Ringo. Chcę się tego nauczyć. :-) – mda

Odpowiedz

11

Z tego samego powodu nie lista wszystkich eksportowanych funkcji we wszystkich załączonych pakietów (od ?ls):

Domyślnie środowisko zaproszenia do „ls” lub „obiektów” jest używany.

Określ środowisko, które zawiera LETTERS, a ls wydrukuje jego nazwę.

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

Ponieważ są one wbudowane obiekty danych. Czy normalne przypisanie do normalnej zmiennej i można go zobaczyć:

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

Running

R> data() 

pokazuje wszystkie dostępne zestawy danych. Więcej informacji można znaleźć na stronie help(data), np. Jak wyszukiwać dane w określonych środowiskach, a nie globalnych.

+1

Więc jak mam listę wbudowanych? – mda

+0

Och, właśnie dodałem, że - "data()". –

+0

data() nie zawiera jednak liter i liter. :( – mda

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

wskazuje, że są one w pozycji 9 na liście wyszukiwania, która jest,

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

pakiet base.

7

Jeśli czytasz , zauważysz, że są to stałe, a nie obiekty danych. Ta strona wskazuje również, że te stałe znajdują się w przestrzeni nazw base. Aby je wymienić trzeba powiedzieć ls() szukać w tej przestrzeni nazw:

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

Dobra przewaga! :-) Zabawne jest w R, gdzie można znaleźć takie strony? Extract i? Constants .... czy istnieje lista wszystkich meta-stron podręczników najwyższego poziomu (z pakietu podstawowego)? – mda

+0

Czy wszystkie obiekty są uważane za "dane" w porównaniu do stałych? Dziwne nazewnictwo ... – mda

+2

(Funkcja 'data' ładuje tylko zestawy danych z pakietów.) Biorę kredyt za atakowanie R-Core w celu wykonania' 'Constants' pracy na linii konsoli. Nie tak dawno temu, mimo że strona pomocy nosiła tytuł "Stałe", to wyszukiwanie nie zakończyłoby się sukcesem. '? Extract' zawsze działało. Innym przydatnym meta-wyszukiwaniem jest "? Urządzenia". Ktoś może być w stanie zbudować listę tytułów stron pomocy, które nie są również nazwami funkcji, ale jest powyżej mojej oceny płac. –

6

Jeśli chcesz zobaczyć obiekty o szczególnym trybie i mają regex wyszukiwania wzorca na uwadze, można przejść badanie z apropos. Byłem trochę zdenerwowany tym, jak dużo znajdę, więc najpierw sprawdziłem długość tego wysiłku, która wynosiła tylko 30. Tutaj są wszystkie wektory postaci znalezione w mojej przestrzeni roboczej. Zauważ, że zarówno „litery” i litery „są wyświetlane.

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" 

Jeśli tak to z nową sesją nie dostanie tyle” .Depends”. Wiele innych wbudowanych wtyczek pojawiają się tutaj, ale „pi” brakuje, ponieważ nie jest z trybie znakowym Jeśli szukać „pi” w moim komputerze jego pozycja jest 25, co nie jest bardzo sensowne, dopóki używasz 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"  

Tak wszystkie te pakiety mają jakiś obiekt (głównie funkcje), które zaczynają się od "pi". Pozycja numeryczna będzie się różnić w zależności od liczby załadowanych pakietów, ponieważ ostatnio załadowane pakiety o niższej liczbie będą naciskać pozycję wyszukiwania o f "podstawa" wyższa.

Powiązane problemy