0

我有很多data.frame在R工作区中的帧。而且我有同样的处理来对待它们。由于我“懒惰”为每个数据运行命令。一个一个一个一个一个frame,我希望将它们视为一个组,并用节省时间的循环处理它们。

简而言之,让我说,将as.data.frame这些矩阵应用于我的真实序列数据处理。

# dummy data
set.seed(1026)
a<-matrix(rnorm(100),50,2)
b<-matrix(rnorm(100),50,2)
c<-matrix(rnorm(100),50,2)
# process data one-by-one which is not good
a<-as.data.frame(a)
b<-as.data.frame(b)
c<-as.data.frame(c)

我可以做到,但这是时间收费​​。我转向一种懒惰但快速的方式,类似于*apply处理data.frame内部的行或列。

sapply(c(a,b,c),as.data.frame)或者sapply(list(a,b,c),as.data.frame),甚至:

> for (dt in c(a,b,c)){
+ dt<-as.data.frame(dt)
+ }

但是,他们都没有做出更改,这是最初的三个矩阵发生的。

> class(a)
[1] "matrix"
> class(b)
[1] "matrix"
> class(c)
[1] "matrix"

我希望看到所有这些都已转移到data.frame。

4

2 回答 2

3

您的问题是您正在使用sapply,这将结果简化为vectorsmatrices

你想要lapply

lapply(list(a,b,c), as.data.frame)

编辑系统地更改对象但保持对象名称相同的(通常不赞成)做法:

for(i in c("a", "b", "c"))
    assign(i, as.data.frame(get(i))
于 2013-09-10T18:06:13.247 回答
1

这应该让你的3名单data.frames

set.seed(1026)
lapply(1:3,function(x){as.data.frame(matrix(rnorm(100),50,2))})
于 2013-09-10T18:03:00.213 回答