【发布时间】:2011-03-12 11:07:53
【问题描述】:
在 R 中,我想创建一个循环,将我的数据帧的前 3000 列写入一个文件,接下来的 3000 列写入另一个文件,依此类推,直到所有列都被分割因此。最好的方法是什么?我知道现在可以通过 CRAN 使用 isplit 和 iterators 函数,但我真的不确定如何去做。请问有什么建议吗?
【问题讨论】:
在 R 中,我想创建一个循环,将我的数据帧的前 3000 列写入一个文件,接下来的 3000 列写入另一个文件,依此类推,直到所有列都被分割因此。最好的方法是什么?我知道现在可以通过 CRAN 使用 isplit 和 iterators 函数,但我真的不确定如何去做。请问有什么建议吗?
【问题讨论】:
你可以试试这样的:
library(plyr)
max.col <- ncol(x)
l_ply(seq(1, max.col, by=3000), function(i)
write.table(x[,i:min(i+2999, max.col)], file=paste("i", i, sep="-"))
)
【讨论】:
help(write.table)。是的:您可以在上面的 paste() 函数调用中指定完整路径。你可以在那里做任何你想做的事情:尝试使用paste 进行试验:帮助(粘贴)。顺便说一句,当您满意时,请接受此作为答案,以便其他人知道问题已解决。
不知道你为什么要费心加载 plyr...假设您的数据框是 df...(从 Shane 的回答中窃取了对 min() 的明智使用)
maxCol <- ncol(df)
for (i in seq(1, maxCol, by 3000)) {
write.table(df[,i:min(i+2999, maxCol)], "i")
}
您可能需要编辑上面的 write.table 命令以添加您喜欢的格式。
【讨论】:
plyr 在此示例中是不必要的(几乎可以使用任何 apply 函数),但总的来说值得了解(这就是我使用它进行演示的原因)。也就是说,for 循环允许副作用,所以我尽量避免它们,除非我想鼓励可能导致“不良”行为的事情。