Импортировать файлы данных в список на основе списка путей

#r #list #csv

#r #Список #csv

Вопрос:

У меня есть загрузка файлов данных .csv, которые организованы по категориям. Я хочу импортировать их в список для каждой категории.

Для этого я создал список файлов путей для каждой категории:

 path_list <- list(a = c("path1","path2"), b= c("path3", "path4","path5"))
  

Затем я хочу прочитать файлы «.csv» в новый список, который имеет ту же структуру, что и path_list :

 data_list <- vector("list", length(path_list))

names(data_list) <- names(path_list)

for(i in 1:length(data_list)) { 
  for (j in 1:3)) {

  data_list[[i]] <- read.csv(path_list[[i]][[j]], header=T, na.strings = "", stringsAsFactors = F)

  print (i)

  }
}
  

Это работает для первых двух элементов path_list$a , но затем я получаю сообщение об ошибке:

 Error in path_list[[i]][[j]] : subscript out of bounds
  

Я знаю, что это потому j , что в a есть только два элемента, когда на самом деле j циклы 1:3 . Есть ли способ сделать j динамический для каждого элемента списка?

Конечный результат должен выглядеть следующим образом:

 data_list
$a
[1] "datafile1" "datafile2"

$b
[1] "datafile3" "datafile4" "datafile5"
  

Ответ №1:

Это вне границ, потому что не все элементы path_list являются вектором длины 3. Работает следующее:

 data_list <- setNames(vector("list", length(path_list)), names(path_list))
l <- lengths(path_list)    ## length of each vector

for(i in 1:length(data_list)) {
  tmp <- vector("list", l[i])
  for (j in 1:l[i])) {
     tmp[[j]] <- read.csv(path_list[[i]][j], header=TRUE, na.strings = "", stringsAsFactors = FALSE)
     }
  data_list[[i]] <- tmp
  }