从n个文本文件到r中n个对象的列表

问题描述

我有一个包含多个文本文件文件夹“ 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文件夹中的所有文件,以便将它们存储在lists列表对象中,如下所示:

[[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)
})

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

解决方法

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

sapplysimplify = FALSE一起使用,可以创建命名列表。

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

names(list_of_vector) <- sub('.*prod_(.*)\\.txt','\\1',filenames)