В дополнение к @ ответ Джеймс, используя lapply
только читает файлы в списке, а не в общей data.frame
. С вашего вопроса это не очевидно, если вы этого хотите. Но я все равно добавлю его для полноты.
Чтобы определить, к какому файлу принадлежит строка в общем data.frame
, я часто добавляю столбец с именем файла. В псевдокоде это будет выглядеть примерно так:
files = list.files()
data_list = lapply(files, function(f) {
dat = read.csv(fname, skip = 6)
dat$fname = fname
return(dat)
})
data_df = do.call("rbind", data_list)
В качестве альтернативы, вы можете использовать удивительную plyr
библиотеку, которая делает ту же самую вещь в:
library(plyr)
files = list.files()
data_df = ldply(files, read.csv, skip = 6)
Я не проверял этот псевдо-код , так что может быть, что есть некоторые недостатки. Но вы получаете основную идею. Например, одна из проблем может заключаться в том, что ldply
автоматически не добавляет имя файла в виде столбца. Затем вам нужно использовать вызов функции, как я сделал, используя lapply
. В этом случае ldply
сэкономит вам шаг do.call
. Обратите внимание: plyr
поддерживает индикатор выполнения (отлично подходит для длительных процессов) и параллельной обработки.
примечание:
- мне нравится больше, чем описательные имена
j
и d
. Это упрощает чтение кода.
На странице справки '... дополнительные аргументы для FUN'. В вашем примере 'read.csv' == FUN, поэтому вы можете просто передать дополнительные аргументы после объявления FUN, т. Е.' Lapply, j, read.csv, skip = 6) '. Подробнее см. '? Lapply'. – Chase