2016-09-21 3 views
0

I list некоторые кадры данных (те же структуры) в список для выполнения lapply для каждого кадра данных. Но после привязки я хочу, чтобы элементы списка возвращались к исходному формату фреймов.как изменить функцию «списка» на исходный вход

Есть ли какая-либо функция, кроме цикла, чтобы сделать это?

dt1<-data.frame(a=c(1,1,1),b=c(2,2,2)) 
dt2<-data.frame(a=c(3,3,3),b=c(4,4,4)) 
dt3<-data.frame(a=c(5,5,5),b=c(6,6,6)) 
lst<-list(dt1,dt2,dt3) 
for (i in 1:3) 
{ #after the data manipilaton 
assign(paste('newdt',i,sep=''),lst[[i]]) 
} 
> dt1 
    a b 
1 1 2 
2 1 2 
3 1 2 
> dt2 
    a b 
1 3 4 
2 3 4 
3 3 4 
> dt3 
    a b 
1 5 6 
2 5 6 
3 5 6 

требуемого выход (я не включаю в себя манипулирование данной части, так что выход и вход выглядит так же)

> newdt1 
    a b 
1 1 2 
2 1 2 
3 1 2 
> newdt2 
    a b 
1 3 4 
2 3 4 
3 3 4 
> newdt3 
    a b 
1 5 6 
2 5 6 
3 5 6 
+3

Лучше хранить наборы данных в 'list', а не создавать новые объекты в глобальной среде – akrun

+1

... Я согласен с тем, что сказал @akrun. Но, с технической точки зрения, 'list2env' будет делать то, что вы описываете. – joran

ответ

1

Использования sapply, манипулировать на каждом кадре данных в цикле, возвращаю его в виде список. переименуйте список в newdt-n, и вам должно быть хорошо идти.

A <- sapply(1:length(lst), function(i){ 
     a_tmp <- list(lst[[i]]) 
     names(a_tmp) <- sprintf('newdt%s', i) 
     a_tmp 
    }) 

> names(A) 
[1] "newdt1" "newdt2" "newdt3" 

> class(A) 
[1] "list" 


> A 
$newdt1 
    a b 
1 1 2 
2 1 2 
3 1 2 

$newdt2 
    a b 
1 3 4 
2 3 4 
3 3 4 

$newdt3 
    a b 
1 5 6 
2 5 6 
3 5 6 

Ради краткости ... вот с какой-то бессмысленной Manip:

> A <- sapply(1:length(lst), function(i){ 
+  new_col <- lst[[i]] %>% mutate(sum_ab = a + b) 
+  a_tmp <- list(new_col) 
+  names(a_tmp) <- sprintf('newdt%s', i) 
+  a_tmp 
+ }) 
> A 
$newdt1 
    a b sum_ab 
1 1 2  3 
2 1 2  3 
3 1 2  3 

$newdt2 
    a b sum_ab 
1 3 4  7 
2 3 4  7 
3 3 4  7 

$newdt3 
    a b sum_ab 
1 5 6  11 
2 5 6  11 
3 5 6  11 
Смежные вопросы