0

R ワークスペースにたくさんの data.frames があります。そして、私はそれらを扱うためにまったく同じ処理をしています。私は各 data.frame に対してコマンドを 1 つずつ実行するのが「面倒」なので、それらをグループとして扱い、時間を節約するループで処理したいと考えています。

簡単に言うと、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)

できますが、時間がかかります。*applydata.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)
+ }

しかし、元の 3 つのマトリックスに変更を加えるものはありません。

> 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

This should get you a list of 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 に答える