2013-11-28 91 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