R - 迭代文件列表

时间:2014-10-28 12:36:43

标签: r list file lapply

我有一个文件列表,其中包含一些我想要读入R的数据,然后迭代每个文件进行一些计算。 到目前为止,我能够使用以下代码读取文件:

方法1

filenames<-list.files(pattern="*.txt")
mynames<-gsub(".txt$", "", filenames)
for (i in 1:length(mynames)) assign(mynames[i], read.table(filenames[i]))

然而,当我尝试将某些功能应用于“名称”时,它只是说“NULL”

lapply(mynames,nrow)

我知道将文件直接读入列表可能更容易

方法2

temp<-list.files(pattern="*.txt")
myfiles<-lapply(temp, read.table,skip="#")

然后对该列表lapply(myfiles,nrow)进行补充,但这只会丢失有关每个列表生成哪个文件的信息。

有没有办法绕过这两种方法来跟踪关系列表文件?

由于

2 个答案:

答案 0 :(得分:4)

对于方法2,您可以轻松使用像

这样的东西
temp <- list.files(pattern = "*.txt")
myfiles <- lapply(temp, read.table, skip = "#")
names(myfiles) <- temp

通过这种方式,names属性存储文件名,并且不会使用新变量使您的工作环境混乱。

因此,当您想要迭代内容时,您可以使用lapply(myfiles, function(.) nrow(.)),或者如果您需要迭代文件名和内容,那么您可以使用lapply(names(myfiles), function(.) nrow(myfiles[[.]]))

答案 1 :(得分:3)

对于第一种方法,请尝试

  sapply(mynames,function(nameoffile){nrow(get(nameoffile))})