list.files()

フォルダ内のファイルを連続して一括で扱う

多数の文書ファイルをいちいち開かず、一気に開いて連続して処理したいとき、list.files()でディレクトリからファイル名を拾って、map()に渡してやり、その中の関数で処理することができる。

以下は、データの中に数値型となるべき列が一部の文字列によって文字型になっているのを、まとめてNAに置き換えて数値型に変換している例。

library(tidyverse)
tmp <- " ID, name,国語,算数,英語
       001, 太郎, 100,  90,欠席
       002, 次郎,  90,  80,  20
       003, 三郎,  80,欠席,  50
       004, 花子,  70,  50, 100
       005, 桃子,  60,  60,  90"
readr::read_csv(tmp) %>%	saveRDS("temp1.rds")
readr::read_csv(tmp) %>%	saveRDS("temp2.rds")
list.files(pattern = "temp.\\.rds") %>%
map_df(readRDS) %>%
mutate(across(!c("ID","name") & where(is.character), parse_number))
参考

r-wakalangの@joelnitta さんに教わった。