из n текстовых файлов в список из n объектов в r

у меня есть папка prod, содержащая несколько текстовых файлов:

prod_123456.txt
prod_123474.txt
prod_1234567543.txt etc...

в каждом из них есть список объектов (без запятых) следующего вида:

prod_123456.txt содержит

1213423
1245
12345
2321
134135

prod_123474.txt содержит:

23425364
3245
123425367485

и т.п.

я хочу прочитать все файлы в папке prod таким образом, чтобы они хранились в списке объектов списков следующим образом:

[[1]]  123456
             
[1] 1213423
[2] 1245
[3] 12345
[4] 2321 
[5] 134135

[[2]]  123474
             
[1] 23425364
[2] 3245
[3] 123425367485

и т.п.

так что в основном это список из n элементов, соответствующих n txt-файлам, где код в имени txt-файла является самим элементом, и для каждого элемента есть список объектов, содержащихся в txt-файле.

это то, что у меня есть до сих пор

filenames <- list.files("folder/", pattern="prod", full.names=TRUE)
ldf <- lapply(filenames, function(i){
  read.csv(i, header=FALSE)
})

но это список фреймов данных и в элементах списка нет имени соответствующих файлов


person Carbo    schedule 13.10.2020    source источник
comment
Что вы пробовали и что не работает?   -  person manotheshark    schedule 13.10.2020


Ответы (1)


Вы можете создавать имена векторных файлов и читать их с помощью readLines.

filenames <- list.files('path/of/folder', full.names = TRUE, pattern = '\\.txt$')
list_of_vector <- sapply(filenames, readLines, simplify = FALSE)

если вы хотите, чтобы каждый элемент был списком, мы можем as.list в функции.

list_of_list <- sapply(filenames, function(x) 
                       as.list(readLines(x)), simplify = FALSE)

Использование sapply с simplify = FALSE позволяет нам создать именованный список.

Если мы хотим, чтобы имена были только числами из имен файлов, а не полным путем, мы можем использовать:

names(list_of_vector) <- sub('.*prod_(.*)\\.txt', '\\1', filenames)
person Ronak Shah    schedule 13.10.2020
comment
это работает, единственная проблема в том, что имя элементов - это вся директория до файла path/of/folder/prod_1234, а не 1234 - person Carbo; 13.10.2020
comment
Мы можем выбрать соответствующую часть пути, используя регулярное выражение. Смотрите обновленный ответ. - person Ronak Shah; 13.10.2020