我有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"只在文件中保存。
请你告诉我该怎么做?
答案 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)