3

30 回の実行データがあり、それぞれが別の CSV ファイル runi.csv に保存されています。i = 0:29 です。

それらをすべてリストにまとめたいとしましょう。これを行う方法を知っている最良の方法は

runs = list()
for (i in 1:30) { runs[[i]] = read.csv(paste("run", i-1, ".csv")); }

さらに、リストに格納されているこれらのデータ フレームのそれぞれに同じ列レイアウトがあり、"x" で識別される列と "y" で識別される列に関心があるとしましょう。

30 回の実行すべてに相当する (x, y) ペアをプロットする最も簡単な方法は何ですか? これが私が現在それを行う方法です(そして、より良い方法があるに違いないと感じています):

xList = list()
yList = list()
for (i in 1:30) { xList[[i]] = runs[[i]]$x; yList[[i]] = runs[[i]]$y; }
matplot(x=as.data.frame(xList), y=as.data.frame(yList))

データを変換しようとすると、これはさらに苦痛になります。リストに格納されている各データ フレームの特定の列に関数を適用する方法がわかりません。

ここでのヘルプは非常に役立ちます。

4

2 に答える 2

5

おそらく、すべてのデータを含む1 つのデータ フレームを作成する方がはるかに良いでしょう。たとえば、インポート時に実行番号を追加 ( runs[[i]] = data.frame(read.csv(paste("run", i-1, ".csv")), Run=i)) してから、 を実行しますalldata <- do.call(rbind, runs)

latticeまたはggplot2を使用してプロットを作成できるようになりました。たとえば、実行ごとに異なる色を使用してすべての実行の散布図を取得するには、次のようにします。

library(ggplot2)
qplot(x, y, colour=Run, data=alldata, geom="point")
于 2010-02-12T19:53:31.350 に答える
3

このようなリストを扱うときは、おそらく l*ply 関数 (plyr から) または lapply を使用するのが最善です。

インポートを行う最も簡単な方法は、おそらく次のようになります。

library(plyr)
runs <- llply(paste("run",1:30,".csv",sep=""), read.csv)

それらをプロットする 1 つの方法を次に示します。

# some dummy data
runs <- list(a=data.frame(x=1:5, y=rnorm(5)), b=data.frame(x=1:5, y=rnorm(5)))
par(mfrow=c((length(runs)/2),2));
l_ply(1:length(runs), function(i) { plot(runs[[i]]$x, runs[[i]]$y) })

もちろん、これを使用せずに別のデバイス (pdf など) に出力することもできますpar()

于 2010-02-12T19:49:58.233 に答える