2013-11-28 35 views
1

我在R中學到了一點lapply魔法,但還沒有想出如何替換嵌套循環 - 這也有可能嗎?使用lapply進行嵌套循環

這是我的問題和嵌套循環解決方案。

monCode <- c('F', 'G', 'H', 'J', 'K', 'M', 'N', 
     'Q', 'U', 'V', 'X', 'Z') 
yearRange <- as.character(3:15) 
yearRange[as.numeric(yearRange) < 10] <- as.character(paste0("0", yearRange[as.numeric(yearRange) < 10])) 

outList <- vector() 
for(Yr in yearRange) { 
    for (mon in monCode) { 
     outList <- c(outList, (paste0("IB", mon, Yr, " Comdty"))) 
    } 
} 

我該如何使用嵌套lapply函數而不是嵌套循環?

在此先感謝

回答

4

不需要嵌套循環或嵌套lapply。

使用expand.grid創建的monCodeyearRange然後do.call(sprintf,...)你的所有組合將它們串聯

f <- expand.grid(monCode,yearRange) 
outList <- do.call(sprintf, c(f, fmt = 'IB%s%s comdty')) 
+0

我得到了(函數(FMT,...)的錯誤'錯誤:太少arguments'從'我已經能夠從paste0(「IB」,f [,1],f [,2],「Comdty」)獲得可用的東西 - 我不明白'sprintf'足夠解決這個問題有什麼問題? – ricardo

+0

問題在於使用'list(...'而不是'c(...'。請參閱編輯。 – mnel

+0

+1/accepted。謝謝.' expand.grid'技巧以消除我的大部分嵌套循環。 – ricardo