2014-11-08 89 views
2

我已經編寫了代碼以生成值序列A01, A02, A03, A04, A05, B01, B02, ..., G04, G05.我知道在R中我們通常不喜歡使用for循環。此代碼有效,但它是處理此問題的最佳方法嗎?for循環中值的最佳賦值向量

letters <- c("A", "B", "C", "D", "E", "F", "G") 
numbers <- c(1:5) 
l <- vector() 
count <- 1 
for(i in letters) 
{ 
    for(j in numbers) 
    { 
     l[count] <- paste(i, j, sep="") 
     count <- count + 1 
    } 
} 

回答

2

對R中的循環反感有些過頭了。如果您不使用過大的數據或複雜的分析,也不需要創建性能代碼,則可以使用循環。循環的潛在優勢在於,它們易於編寫而不會犯錯誤,而且稍後您可以輕鬆查看代碼的工作方式。循環與R在引擎蓋下工作的方式有些「衝突」,但對於初學者來說,這並不是什麼大不了的事情。如果你喜歡這個,你可以使用循環。

另一方面,我不會這樣做。這裏是一個辦法,是不是太先進,併產生更乾淨的代碼(見?outer):

l <- outer(LETTERS[1:7], as.character(c(1:5)), FUN=paste, sep="") 
l <- as.vector(l) 
l 
# [1] "A1" "B1" "C1" "D1" "E1" "F1" "G1" "A2" "B2" "C2" "D2" "E2" "F2" "G2" "A3" 
# [16] "B3" "C3" "D3" "E3" "F3" "G3" "A4" "B4" "C4" "D4" "E4" "F4" "G4" "A5" "B5" 
# [31] "C5" "D5" "E5" "F5" "G5" 
+2

我想補充一點,循環往往需要明確的變量,而像'outer'和功能分配對象'apply'取照顧你。這通常會導致更清晰,更易讀的代碼(效率是一個不錯的獎勵)。但是,它可能會導致_ambiguous_代碼,這可能會使調試變得更加困難,甚至更糟糕的是,會悄悄地產生不正確的結果。 – shadowtalker 2014-11-08 17:51:14