我想将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)
}
}
}
}
答案 0 :(得分:2)
那是因为if ( j == 1 )
位用于检查这是否是您第一次写入文件。
如果第一次是,那么它会写出列名(即X
,Y
,Z
,p
)进入文件(参见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
}}}