我有一个文件列表,其中包含一些我想要读入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)
进行补充,但这只会丢失有关每个列表生成哪个文件的信息。
有没有办法绕过这两种方法来跟踪关系列表文件?
由于
答案 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))})