더북(TheBook)

아니면 이 조건을 반대로 하여 내부 for 루프의 표현식을 다음 코드로 바꾸어도 정확히 같은 결과를 얻는다.

> if (c1 != c2) {
+     combx2 <- c(combx2, paste(c1, c2, sep = ",", collapse = ""))
+ }

앞 코드는 중첩 루프가 동작하는 방법을 잘 보여 주지만 문제를 해결하는 최선의 방법은 아니다. 일부 내장 함수는 벡터 요소로 조합 또는 순열을 만드는 데 아주 유용하다. combn() 함수는 원자 벡터와 각 조합에 필요한 요소 개수가 주어졌을 때 벡터 요소를 조합한 행렬을 만들어 준다.

> combn(c("a", "b", "c"), 2)
       [,1]    [,2]    [,3]
[1,]    "a"     "a"     "b"
[2,]    "b"     "c"     "c"

for 루프를 사용한 앞 예제들과 비슷하게 expand.grid() 함수는 여러 벡터에 있는 요소의 모든 순열을 갖는 데이터 프레임을 만들어 준다.

> expand.grid(n = c(1, 2, 3), x = c("a", "b"))
    n     x
1   1     a
2   2     a
3   3     b
4   1     b
5   2     c
6   3     c

for 루프도 강력한 기능이지만, 특정 작업을 위해 설계된 함수도 있다. 모든 것을 for 루프에 직접 넣기보다는 내장 함수를 사용하는 것을 고려하면 좋다. 다음 장에서는 많은 경우 for 루프를 대체할 수 있는 lapply() 함수와 관련 함수들을 소개한다. 이것으로 코드를 작성하고 이해하기가 더 쉬워질 것이다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.