如何使用R中的循环从许多数据帧中编写许多文件?

时间:2017-05-11 23:22:02

标签: r file loops

我有22个不同的数据帧,我从22个不同的文件中读取并将对象命名为r1到r22。现在我想再次在22个不同的文件中写它们。我想使用循环。这是我的剧本:

for(i in 1:2)  {        
    write.table(paste("r", i, sep = ""), paste("r",i,".txt",sep="") , sep = " ",
                col.names=F, row.names=FALSE, quote=F)  
}

它不会在文件" r1"中写入r1的值。它实际上写了" r1"只在文件中保存。

请你告诉我该怎么做?

2 个答案:

答案 0 :(得分:1)

尝试将paste("r", i, sep = "")替换为eval(parse(text=paste("r", i, sep = "")))

现在您的代码将会显示为:

for(i in 1:22) {
write.table(eval(parse(text=paste("r", i, sep = ""))), paste("r",i,".txt",sep="") , 
            sep = " ",col.names=F, row.names=FALSE, quote=F)
}

答案 1 :(得分:0)

听起来你将所有22个data.frames作为环境中的独立对象?在那种情况下,for循环可能是最简单的选择。

作为一种替代方法,如果你经常做这种事情,在阅读文件时我会将它们收集到列表中,那么你可以用同样的方式写出来。

# assuming there is a file list like this with each element a data.frame
file.list <- list(r1,r2,r3...r22)

file.names <- paste(rep("r", length(file.list)), c(1:length(file.list)), sep = "")

mapply(function(x,y) {write.table(x, y, sep = " ", col.names=F, row.names=FALSE, quote=F)}, file.list, file.names)