2013-11-28 2 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 함수를 사용하면 어떻게 될까요? lapply 중첩 중첩 루프 또는 미리

답변

4

필요가 없습니다에

감사합니다.

사용 expand.grid 그들에게 내가 (기능 (FMT, ...)의 오류 '오류 얻을

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

연결하는 다음 monCodeyearRangedo.call(sprintf,...)의 모든 조합을 만들려면 다음에서 너무 적은 arguments'을' do.call' 라인을 사용했다. 나는'paste0 ("IB", f [, 1], f [, 2], "Comdty")에서 쓸모있는 것을 얻을 수 있었다.''나는'sprintf'를 충분히 이해하지 못했다. – ricardo

+0

이 문제는'c (...'대신에'list (...')를 사용하고 있습니다. 편집을 보시려면 – mnel

+0

+1/받아들입니다. 'expand.grid' 트릭 내 중첩 된 루프의 대부분을 제거합니다. – ricardo