Chapter 15 반복구문
R의 계산은 순차적으로 평가하는 명령문(statement)으로 구성됩니다. x <- 1 : 10
또는 mean(y)
와 같은 명령문은 세미콜론(;
) 또는 새 줄(<Enter>
)로 구분할 수 있습니다. 평가자에게 구문상 완전한 명령문이 표시될 때마다 해당 명령문이 평가되고 결과가 값으로 반환됩니다. 명령문을 평가한 결과는 그 명령문의 값이라고 할 수 있습니다. 값은 항상 하나의 기호(변수)에 할당 될 수 있습니다.
세미콜론(;
)과 새 줄은 모두 명령문을 구분하는 데 사용할 수 있습니다. 세미콜론(;
)은 항상 명령문의 끝을 나타내며, 새 줄은 명령문의 끝을 나타내지 못할 수도 있습니다. 이는 현재 명령문이 구문적으로 완전하지 않으면 평가자에 의해 새 줄은 명령문의 끝을 나타내지 못합니다. 이는 세션이 대화형일 떄 프롬프트가 ‘>
’ 에서 ‘+
’ 로 변경되어 표시해 줍니다.
<- 0; x + 5 x
## [1] 5
<- 1:10
y 1:2
## [1] 1 2
명령문들은 중괄호‘{
’와 ‘}
’를 사용하여 함께 그룹화할 수 있습니다. 명령문 그룹을 때때로 블록(block, body)이라고합니다. 구문 상 완전한 명령문 끝에 새 행을 입력하면 단일 명령문이 평가됩니다. 블록은 닫는 중괄호 다음에 새 줄을 입력할 때까지 평가되지 않습니다. 이 절의 나머지 부분에서 명령문은 단일 명령문 또는 블록 명령문을 나타냅니다.
이번 장과 다음 장에서는 이러한 명령문을 반복적으로 수행하게 하거나, 조건에 따라 다른 명령문을 수행하게 하는 방법에 대하여 학습하겠습니다.
먼저 명령문을 반복적으로 수행하게 하는 방법에 대하여 살펴 보겠습니다.
R에는 명시적으로 명령문을 반복적으로 수행하게 하는 명령문에는 for
, while
, 그리고 repeat
등이 있습니다.
문법 | 의미 |
---|---|
for (i in data) { i를 사용한 문장 } |
data 에 들어 있는 각각의 값을 변수 i 에 할당하면서 각각에 대해 블록 안의 문장을 수행합니다. |
while (cond) { 조건이 참일 때 수행할 문장 } |
조건 cond 가 참일 때 블록 안의 문장을 수행합니다. |
repeat { 반복해서 수행할 문장 } |
블록 안의 문장을 반복해서 수행합니다. repeat 는 다른 언어의 do-while 에 해당합니다. |
두 개의 R에 내장된 구조인 next
와 break
는 이러한 반복구문에 추가적인 제어를 제공합니다. 또한 R은 tapply()
함수, apply()
그리고 lapply()
함수와 같은 암시적 루프를 위한 다른 함수도 제공하고 있습니다. 또한 많은 연산에서 특히 벡터에 대한 학습에서 살펴본 바와 같이 산술 연산이 벡터화되므로 루프를 사용할 필요가 없습니다.
루프를 명시적으로 제어하는 데 사용할 수있는 두 가지 명령문이 있습니다. 그것은 break
와 next
입니다.
break
문은 현재 실행중인 가장 안쪽 루프에서 종료됩니다.
next
문은 즉시 제어가 루프의 시작으로 돌아가도록 합니다. 그런 다음 루프의 다음 반복 (있는 경우)이 실행됩니다. 현재 루프에서 next
아래의 문은 평가되지 않습니다.
루프 문에서 반환된 값은 항상 NULL
이며 보이지 않게 반환됩니다.