将循环结果合并到R中的一个文件中(缺少某些结果)

时间:2012-03-23 04:19:17

标签: r

我想将for循环的结果合并到1个txt文件中,并根据此链接的建议编写了我的代码
combine results from a loop in one file

有一个问题。我应该得到8个结果(行),但我只以5结束。不知何故,其他结果没有进入文件。我认为问题在于if语句,但我不知道如何修复它。

这是我的代码

prob <- c(0.10, 0.20)
for (j in seq(prob)) {
  range <- c(2,3)
  for (i in seq(range)) {
    sample <- c(10,20)
    for (k in seq(sample)) {
      data <-  Simulation(X =1,Y =range[i], Z=sample[k] ,p = prob[j])
      filename <-  paste('file',i,'txt')
      if (j == 1) {
        write.table(data, "Desktop/file2.txt", col.names= TRUE) 
      } else {
        write.table(data,"Desktop/file2.txt", append = TRUE, col.names = FALSE)
      }
    }
  }
}

1 个答案:

答案 0 :(得分:2)

那是因为if ( j == 1 )位用于检查这是否是您第一次写入文件。

如果第一次,那么它会写出列名(即XYZp)进入文件(参见col.names=TRUE?)。

如果第一次不是,那么它将不会写入列名,但只会附加数据。

由于您有多个嵌套循环,因此该条件对您来说效果不佳:当j==1(即prob=0.1)时,您执行其他4个循环。但是从j==1开始,数据每次都会被覆盖。

我建议初始化一个变量count来计算您执行Simulation的次数,然后将该行更改为if ( count == 1 )

count <- 1
prob <- c(0.10,0.20)
# .... code as before
    data <-   Simulation(X =1,Y =range[i], Z=sample[k] ,p = prob[j])
    if ( count == 1 ) {
        write.table(data, "Desktop/file2.txt", col.names=T)
    } else {
        write.table(data, "Desktop/file2.txt", append=T, col.names=F)
    }
# increment count
count <- count + 1 
}}}