質問: お世話になっております。R言語についてお伺いさせて頂きたく存じます。 データとして100個のcsvファイルを保有しており、次のような規則性のあるデータ名です。 0001,0002,0003・・0010,0011,0012,・・0099,0100 これらのデータ名を表現するにはfor構文上でformatC関数を用いて作成するところまではわかりました。 次にそうして作成したデータ名を用いてcsvファイルを連番にしたがって読み込み、 次のような名称をもつオブジェクトに格納していきたいと考えています。 data0001,data0002,・・・・,data0100 そのために次のようにコードを書きました。 ``` for(i in 1:100){ i<-formatC(i,width=4,flag="0") df<-paste(i, ".csv", sep="") eval(parse(text=paste("data", i, "<-read.csv('", df, "')", sep=""))) } ``` 参考にしたウェブサイトは下記です。 Rで複数のcsvファイルを読み込む - Qiita しかし、他の質問スレッドを拝見したり、試行錯誤をしても、うまくいきませんでした。 申し訳ありませんが、このコードのどこにエラーがあるのかをご教示頂けないでしょうか。
回答: 「ある場所にあるCSVファイルを全て読みこみたい」との解釈でよろしければ、 ファイル一覧を取得してしまう方が早いと思いましたがいかがでしょうか? 下記の二行だけで済みますよ ``` pacman::p_load(tidyverse) # data リストに、 0001-0100 の tibble を格納 f <- list.files(path = [保存場所], pattern = "*.csv", full.names = TRUE) data <- lapply(f, read_csv) ``` 参考までに、リストの操作例も記載します: ``` # リスト操作: 「0010のデータが欲しい」時は、このようにインデックスを指定します print(data[0010]) # リスト操作:「インデックスは、レンジでも指定できます print(data[0010:0020]) # リストは、このように縦結合することもできます alldata <- data %>% bind_rows ``` また read.csv() は非常に古い関数で、遅い上に勝手にfactor化する問題などがありますので、 余程の理由がない限り read_csv() を使った方がよろしいかと思います。(3倍くらい速いです)