R에서 foreach 패키지를 설치하면 자동으로 iterators 패키지도 설치한다.


> install.packages("foreach")



also installing the dependency ‘iterators’


URL 'https://cran.rstudio.com/bin/macosx/mavericks/contrib/3.2/iterators_1.0.7.tgz'을 시도합니다

Content type 'application/x-gzip' length 309613 bytes (302 KB)

==================================================

downloaded 302 KB


URL 'https://cran.rstudio.com/bin/macosx/mavericks/contrib/3.2/foreach_1.4.2.tgz'을 시도합니다

Content type 'application/x-gzip' length 382114 bytes (373 KB)

==================================================

downloaded 373 KB




1. Iterator 

iterator를 사용하는 예제이다. loop를 종료하는 조건이 특이하다.

library(iterators)


name = c("A", "B", "C", "D")

itr <- iter(name)

while (TRUE) {

  d = try(nextElem(itr))

  print(d)

  if (class(d) == "try-error") break

}




결과는 다음과 같다.


[1] "A"

[1] "B"

[1] "C"

[1] "D"

Error : StopIteration

[1] "Error : StopIteration\n"

attr(,"class")

[1] "try-error"

attr(,"condition")

<simpleError: StopIteration>



주의 할 점은 break 라인이다. 만약 아래 줄이 없으면, 무한 루프에 빠진다. 

 if (class(d) == "try-error") break




2. foreach


foreach는 do와 같이 써서, 아래 doSNOW를 설치한다.


> install.packages("doSNOW")



그리고, 아래 예제를 실행한다.


> foreach(i = 1:3) %do% {sqrt(i)}

[[1]]

[1] 1


[[2]]

[1] 1.414214


[[3]]

[1] 1.732051




참고 자료. 

http://www.exegetic.biz/blog/2013/11/iterators-in-r/

http://www3.nd.edu/~steve/computing_with_data/21_looping/looping_iterators_part1.html

Posted by '김용환'
,