#r #for-loop
#r #для цикла
Вопрос:
Я пытаюсь прочитать несколько больших файлов в цикле. Поэтому вместо того, чтобы делать:
library(fst)
df1 <-read_fst("C:/data1.fst", c(1:2), from = 1, to = 1000)
df2 <-read_fst("C:/data2.fst", c(1:2), from = 1, to = 1000)
df3 <-read_fst("C:/data3.fst", c(1:2), from = 1, to = 1000)
Я хотел бы сделать что-то вроде этого:
for(i in 1:3){
df_i <- read_fst("C:/data_i.fst", c(1:2), from = 1, to = 1000)
}
Комментарии:
1. Все ли ваши файлы имеют имена data1, data2 и т. Д.?
Ответ №1:
Вы можете использовать list.files
для генерации всех .fst
файлов в заданном каталоге, а затем перебирать их:
files <- list.files(pattern =".fst") # .fst files in your current directory
df_list <- rep(list(NA), length(files)) # Init list of DFs
for (i in seq_along(files))
df_list[[i]] <- fst::read_fst(files[i], ...)
- Вы можете уточнить
pattern
аргумент вlist.files
соответствии с определенным шаблоном, напримерpattern = "data_\d .fst"
, для сопоставления с data_i.fst - Вы также можете указать каталог для просмотра с помощью
path
аргумента и вернуть полные имена файлов с помощьюfull.names
Ответ №2:
Для вывода цикла лучше использовать список, подобный этому. Вы можете создать вектор для сохранения каталогов, в которых хранятся файлы (я сделал myvec
, и вы можете изменить 1:3
1:n
, где n
может быть большее число). После этого все результаты цикла будут List
включены. Здесь код:
library(fst)
#Create empty list
List <- list()
#Vector
myvec <- paste0("C:/data",1:3,".fst")
#Loop
for(i in 1:length(myvec))
{
List[[i]] <- read_fst(myvec[i], c(1:2), from = 1, to = 1000)
}