0

我有一个包含几个文本文件的文件夹“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 个 txt 文件的 n 个元素的列表,其中 txt 文件名中的代码是元素本身,并且对于每个元素,都有一个包含在 txt 文件中的对象列表

这就是我到目前为止所拥有的

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

但它是数据框列表,并且列表元素中没有相应文件的名称

4

1 回答 1

0

您可以创建矢量文件名并使用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)

使用sapplywithsimplify = FALSE允许我们创建一个命名列表。

如果我们希望名称只是文件名中的数字而不是我们可以使用的完整路径:

names(list_of_vector) <- sub('.*prod_(.*)\\.txt', '\\1', filenames)
于 2020-10-13T12:44:17.983 回答