前回の続き。
ファイルの読み込みをファイル名称listでやってみました。
test1~test3のcsvを作ってC:\test\に保存しました。
test1.csv
index | columnName1 | columnName2 | columnName3 | columnName4 | columnName5 |
---|---|---|---|---|---|
0 | 123 | 321 | 519 | 717 | 915 |
1 | 456 | 654 | 852 | 1050 | 1248 |
2 | 789 | 987 | 1185 | 1383 | 1581 |
3 | 1122 | 1320 | 1518 | 1716 | 1914 |
4 | 1455 | 1653 | 1851 | 2049 | 2247 |
5 | 1788 | 1986 | 2184 | 2382 | 2580 |
6 | 2121 | 2319 | 2517 | 2715 | 2913 |
7 | 2454 | 2652 | 2850 | 3048 | 3246 |
8 | 2787 | 2985 | 3183 | 3381 | 3579 |
9 | 3120 | 3318 | 3516 | 3714 | 3912 |
10 | 3453 | 3651 | 3849 | 4047 | 4245 |
test2.csv
index | columnName1 | columnName2 | columnName3 | columnName4 | columnName5 |
---|---|---|---|---|---|
0 | 456 | 654 | 852 | 1050 | 1248 |
1 | 789 | 987 | 1185 | 1383 | 1581 |
2 | 1122 | 1320 | 1518 | 1716 | 1914 |
3 | 1455 | 1653 | 1851 | 2049 | 2247 |
4 | 1788 | 1986 | 2184 | 2382 | 2580 |
5 | 2121 | 2319 | 2517 | 2715 | 2913 |
6 | 2454 | 2652 | 2850 | 3048 | 3246 |
7 | 2787 | 2985 | 3183 | 3381 | 3579 |
8 | 3120 | 3318 | 3516 | 3714 | 3912 |
9 | 3453 | 3651 | 3849 | 4047 | 4245 |
10 | 3786 | 3984 | 4182 | 4380 | 4578 |
test3.csv
index | columnName1 | columnName2 | columnName3 | columnName4 | columnName5 |
---|---|---|---|---|---|
0 | 789 | 987 | 1185 | 1383 | 1581 |
1 | 1122 | 1320 | 1518 | 1716 | 1914 |
2 | 1455 | 1653 | 1851 | 2049 | 2247 |
3 | 1788 | 1986 | 2184 | 2382 | 2580 |
4 | 2121 | 2319 | 2517 | 2715 | 2913 |
5 | 2454 | 2652 | 2850 | 3048 | 3246 |
6 | 2787 | 2985 | 3183 | 3381 | 3579 |
7 | 3120 | 3318 | 3516 | 3714 | 3912 |
8 | 3453 | 3651 | 3849 | 4047 | 4245 |
9 | 3786 | 3984 | 4182 | 4380 | 4578 |
10 | 4119 | 4317 | 4515 | 4713 | 4911 |
これを以下のコードで読み込んで処理しました。
#読み込むファイル名(変数名)
loadNameList <- c("test1", "test2", "test3")
#ファイルパスの\は/にしないと通りません
dirPath <- "C:/test/"
extension <- ".csv"
#計算結果を詰めるlist
D <- list()
#行の名前list
DRowNames <- list()
rowIndex <- 0
for(i in loadNameList)
{
newenvName1 <- i
assign(newenvName1,
#fileEncoding="UTF-8-BOM"が必要な条件が不明 .NETのUTF-8指定だと必要なのかパスの日本語で必要なのか・・・?
read.csv(sprintf("%s%s%s",dirPath,i,extension), sep = ",", fileEncoding="UTF-8-BOM"))
if(!is.recursive(get(newenvName1))
||is.null(get(newenvName1)$columnName1 ))
{next}
newenvName2 <- sprintf("summary_%s",i)
assign(newenvName2 , rowIndex)
assign(newenvName2,
#plot時のX軸データが欲しいので適当なindexを付けてます。
cbind(get(newenvName2),
#データ構造を誤認していました
#summaryは実際は行方向に計算結果を持っていたようです
#よって一旦行列を入れ替えます
t(summary(get(newenvName1)$columnName1 ))))
D <- rbind(D,get(newenvName2))
DRowNames <- c(DRowNames, newenvName2)
rowIndex <- rowIndex + 1
}
row.names(D) <- DRowNames
Dの中身を見るとこんな感じに仕上がりました。
結果
Min. | 1st Qu. | Median | Mean | 3rd Qu. | Max. | ||
---|---|---|---|---|---|---|---|
summary_test1 | 0 | 123 | 955.5 | 1788 | 1788 | 2620.5 | 3453 |
summary_test2 | 1 | 456 | 1288.5 | 2121 | 2121 | 2953.5 | 3786 |
summary_test3 | 2 | 789 | 1621.5 | 2454 | 2454 | 3286.5 | 4119 |
これで
plot(D[,1],D[,2], xlab="index", ylab=dimnames(D)[[2]][2])
とかでplotも引けます。
列名を取るのにちょっと苦労しました。
○○namesが色々ありますが自分が今扱いたいものがどれなのか分からないですね~。
行や列に名前を付けるとdimnamesで取れるんですね。
存在を知ってれば納得ですが、存在を知らないと中々辿り着けません・・・。
因みに
>D[0,]
Min. 1st Qu. Median Mean 3rd Qu. Max.
> D[,0]
summary_test1
summary_test2
summary_test3
でそれっぽいものが取れますが、
先頭に空白要素があってplotで使おうとすると
plot(D[,0],D[,1])
Error in xy.coords(x, y, xlabel, ylabel, log) :
'x' and 'y' lengths differ
と怒られます。