2012-03-23 40 views
0

我想要的結果,從一個for循環合併爲1個的txt文件,我寫我的代碼從這個鏈接
combine results from a loop in one file從環作爲R一個文件合併結果(部分結果丟失)

根據建議

有一個問題。我應該得到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

什麼是「文件名」對象的目的是什麼? – 2012-03-23 11:24:08

回答

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 
}}} 
+0

它的工作原理!謝謝你,數學咖啡! :-) – Amateur 2012-03-23 06:08:13

+2

@Amateur,你也可以在沒有數據的循環之外創建文件,只是標題,然後在循環內追加到文件中(避免if和else語句,並且擔心循環的哪個級別應該是索引創建第一個文件)。如果您願意(也就是擴展變量空間),這也允許您在循環的另一個運行中追加到文件中。 – 2012-03-23 11:27:18

+0

謝謝Etienne Low-Decarie。問題是我不知道語法如何。我在R和電腦編程方面都是新手。 – Amateur 2012-03-24 02:16:19