如何将'list'函数反转为其原始输入

时间:2016-09-21 17:06:43

标签: r

list一些数据帧(相同结构)到列表,以对每个数据帧执行lapply。但是在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

1 个答案:

答案 0 :(得分: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

为了简洁起见......这里有一些毫无意义的操作:

> 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