2010-03-26 17 views
13

Wyobraź sobie, że obiekt foo, który został zapisany jako saved.file.rda następująco:ustalania nazwa obiektu załadowany R

foo <- 'a' 
save(foo, file='saved.file.rda') 

Załóżmy, że załadować saved.file.rda w środowisku z wieloma obiektami, ale zapomniałem nazwy obiektu, który jest w saved.file.rda. Czy istnieje sposób w R, aby określić tę nazwę?

Można zrobić to w następujący sposób, który wydaje się nieco niezgrabne:

bar <- load('saved.file.rda') 
eval(parse(text=bar)) # this will pull up the object that was in saved.file.rda 

Jednak czy istnieje lepszy sposób to zrobić?

+0

prostu do wyjaśnienia: chcesz nazwę obiektu ('' "foo") i/lub wartości obiektu (' "a"')? – Marek

+0

Marek, jestem interesetd w nazwie obiektu, dzięki czemu mogę się do niego odnieść później. – andrewj

+0

Nazwa obiektu znajduje się w zmiennej 'bar'. Możesz więc wydrukować i zobaczyć nazwę. – Marek

Odpowiedz

18

zakładając, że istnieje tylko jeden obiekt zapisany w saved.file.rda, o:

bar <- load('saved.file.rda') 
the.object <- get(bar) 

lub po prostu:

bar <- get(load('saved.file.rda')) 

Jeśli chcesz być „czysty” i nie zanieczyszczać swoją globalną przestrzeń roboczą z rzeczy załadowałeś (i zapomniałeś nazwy), możesz załadować swój obiekt do środowiska i określić, które środowisko w twoim telefonie wywołuje get.

Może:

temp.space <- new.env() 
bar <- load('saved.file.rda', temp.space) 
the.object <- get(bar, temp.space) 
rm(temp.space) 
... 
+0

Ładowanie danych do środowiska jest inne. Sprawdź moją odpowiedź. Rozwiązujesz ładowanie danych do globalnego obszaru roboczego. Wykonaj 'ls()'. – Marek

+0

Ah .. Zamierzałem umieścić 'temp.space' jako drugi argument na' load'. Dobry połów (i edytowany, aby naprawić) –

+0

Dziękuję za to, patrzyłem przez to na chwilę. –

3

dobrze, wiem funkcję, która eliminuje potrzebę, aby to zrobić (tj znaleźć nazwę obiektu w pliku binarnego R po prostu załadowany) - innymi słowy można użyć tej metody, aby załadować pliki binarne R zamiast 'obciążenia':

file_path = "/User/dy/my_R_data/a_data_set.RData" 
attach(file_path, pos=2, name=choose_a_name, warn.conflict=T) 
  • 'warn.conflicts = T' jest domyślnym opcja

  • "pos = 2" jest również domyślne; "2" odnosi się do pozycji w wyszukiwaniu ścieżka. Na przykład pozycja 1 to ".GlobalEnv." Aby uzyskać całą tablicę ze ścieżek wyszukiwania, użyj wyszukaj(). Więc by uzyskać dostęp do ścieżki wyszukiwania dla nowego obiektu przez search() [2]

  • używanie „odłączyć”, aby usunąć obiekt

5

Jak można przeczytać w ?load można załadować danych do określonego środowiska. Następnie można użyć get i ls aby uzyskać to, co chcesz:

tmp_env <- new.env() 
load('saved.file.rda', tmp_env) 
get(ls(tmp_env), envir=tmp_env) # it returns only first object in environment 
# [1] "a" 
Powiązane problemy