2013-02-19 14 views
15

Czy jest możliwe umieszczenie wielu ramek danych na liście w prosty sposób? Czyli zamiast napisać każdą nazwę ręcznie jak następujący sposób:Umieszczanie wielu ramek danych na liście (inteligentny sposób)

list_of_df <- list(data_frame1,data_frame2,data_frame3, ....) 

Mam wszystkie ramki danych załadowany do mojego miejsca pracy. Mam zamiar użyć tej listy do zapętlenia wszystkich ramek danych (aby wykonać te same operacje na każdej ramce danych).

+0

@Imo i @EdChum; To pytanie zostało opublikowane przed pytaniem, które oznaczyłeś jako dublowane. Proszę spojrzeć na daty! –

Odpowiedz

20

Można użyć ls() z get następująco:

l.df <- lapply(ls(), function(x) if (class(get(x)) == "data.frame") get(x)) 

To będzie ładować wszystkie data.frames z bieżącej przestrzeni roboczej środowiska.

Alternatywnie, jak sugeruje @agstudy, możesz użyć wzoru do załadowania tylko wymaganych data.frame.

l.df <- lapply(ls(pattern="df[0-9]+"), function(x) get(x)) 

ładuje wszystkie data.frame S w obecnej sytuacji, która rozpoczyna się df następnie przez 1 do dowolnej ilości numerów.

+0

Czy istnieje sposób na zachowanie nienaruszonych nazw obiektów? Ta metoda działa dobrze, ale nazwy ramek danych nie są wyodrębniane. Czy istnieje lepszy sposób niż przypisywanie ich osobno? Dzięki. – Anusha

+0

@Aushaya, przepraszam, nie rozumiem tego co masz na myśli. Mówisz, że chcesz listę data.frames z nazwami każdego elementu listy będącymi nazwami tych danych.frames? – Arun

+0

Tak. Obiekty zostały zidentyfikowane na podstawie ich nazw, ale nie są uwzględnione na liście. Wolałbym przypisać nazwy ramek danych wybranych w tym kroku. – Anusha

6

Możesz użyć ls z określonym wzorem, na przykład. Na przykład:

niektóre data.frames:

data.frame1 <- data.frame() 
data.frame2 <- data.frame() 
data.frame3 <- data.frame() 
data.frame4 <- data.frame() 

list(ls(pattern='data.fra*')) 
[[1]] 
[1] "data.frame1" "data.frame2" "data.frame3" "data.frame4" 
+4

To daje listę nazwisk, a nie treść obiektu. –

6

Zdecydowanie najłatwiejszym rozwiązaniem byłoby umieszczenie data.frame na liście, w której je tworzysz. Jednak zakładając, że masz listę znaków nazwy obiektu:

list_df = lapply(list_object_names, get) 

gdzie można skonstruować ty liście, jak ten (przykład dla 10 obiektów):

list_object_names = sprintf("data_frame%s", 1:10) 

lub uzyskać wszystkie obiekty w bieżącym obszarze roboczym na listę:

list_df = lapply(ls(), get) 
names(list_df) = ls() 
Powiązane problemy