2013-08-12 27 views
1

我试图从数组中提取每两个连续的列,每写一个.dat。问题是,使用write.table()时会覆盖文件。当我使用print()而不是write.table()时,它显示了正确的子集。“For”循环比使用write.table时覆盖更多

我还需要文件名来显示所选列对的数量(共6对),以及维数(从1到5)。为此,我使用了一个更简单的解决方案,例如1:30标记。

for(i in 0:5) { 
    for (j in 1:5) { 
    for (k in 1:30) { 
     filename <- paste("Component",k, ".dat", sep="") 
     write.table(data[,c(2*i+1,2*i+2),j],col.names=F, row.names=F, sep= " ")  
    } 
    } 
} 

任何暗示为什么它不起作用? 我希望我的目标是可以理解的。非常感谢您的时间!

+0

那么,你有没有尝试将'filename'传递给'write.table'?文件名应该包含'i'和'j'。 – Roland

+0

对,对不起。我在这里简化了代码并忘记了包含它,但是我在R代码中输入了它,但没有成功 –

回答

2

设置参数appendTRUE

write.table(data[,c(2*i+1,2*i+2),j], 
      file=filename, 
      append=TRUE, 
      col.names=F, 
      row.names=F, 
      sep= " ") 

也,如正确地@Roland指出的那样,你已经忘记了传递文件参数(在我的例子已经加入以上)。

+0

仍然存在错误。我在这里复制我的命令和R消息:'for(i in 0:5){(1:5中的j)文件名< - paste(“Component”,c(j,i + 1),“ write.table(data [,c(2 * i + 1,2 * i + 2),j],filename,append = T,col.names = F,row.names(“.dat”,sep =“”) write.table错误读取::'文件错误(文件,ifelse(append,“a”,“w”)): 无效的“描述”参数 另外:警告信息: if(file ==“”)file < - stdout()else if(is.character(file)){: 条件长度大于1且只有第一个元素会被使用'谢谢你的帮帮我! –

+0

'filename < - paste(“Component”,c(j,i + 1),“。dat”,sep =“”)'产生一个带有2个文件名的向量(write.table接受一个),你可能想要这样做:'filename < - paste(“Component”,j,“_”,i + 1,“.dat”,sep =“”)' – digEmAll

+0

Thanks!这是解决问题的关键 –