A.3 R Keywords

R의 keyword에는 다음과 같은 것들이 있다.

if
else
function
for    # for loop
in     # each one in right ones
next   # continue to next iteration
break  # exit current loop
...    # other arguments

마지막 것은 받은 인자를 그대로 다른 함수에 넘겨줄 때 쓴다. 그런데, 생각보다 keyword의 수가 매우 적다. Keyword라고 생각했던 것이 사실은 대부분 함수이기 때문이다. 각종 수학, 논리 연산자 뿐 아니라 심지어는 indexing에 사용하는 bracket ‘[’ 도 함수이다. 다음은 모두 bracket 함수를 부르는 것이며 같은 결과를 낸다

x = 1:3

# Pick the third element: 3
x[3] # 3
`[`(x, 3) # 3
do.call('[', list(x, 3)) # 3

# Pick the fourth element: Not Available
x[4] # NA
`[`(x, 4) # NA
do.call('[', list(x, 4)) # NA

함수들은 재정의가 가능하므로 연산자들도 재정의하거나, 새로 만드는 것이 가능하다.

A.3.1 if … else …

if 는 else 없이 쓰일 수도 있고, else if의 형태로 여러 번 나올 수도 있으나, 대체로 다음과 같다.

if (condition) {
  # statements for the case of TRUE condition
} else {
  # statements for the case of FALSE condition
}

condition은 evaluation 결과가 TRUE 또는 FALSE이어야 한다. 좀 더 많은 경우로 분기할 때는 switch라는 함수를 쓸 수도 있다. 하지만, C 언어의 switch만큼 편하지 않아서 생각보다 많이 쓰이지 않는다.

A.3.2 function

R에서 함수(function)는 대체로 다음과 같이 생성한다.

myFunctionName = function(argument1, arugment2, arugment3 = defaultValue, ...)
{
  # Check if the input arguments are OK.

  on.exit(An expression to be executed) # see help

  # Process the input and make the result to be returned

  return(Result)
}

함수의 내용이 간단히 한 줄로 나타낼 수 있으면, {}를 생략할 수 있다. 인자(arguments)가 없어도 함수를 만들 때나 부를 때는 ()를 써주어야 한다.

on.ext()함수는 함수가 정상적 또는 비정상적으로 종료할 때 실행해야 하는 것을 넣으면 된다.

A.3.3 for loop

for loop의 형태는 대체로 다음과 같다.

for (i in 1:10) {
  # R statements
  if (condition == 1) next
  # R statements
  if (condition == 2) break
  # R statements
}

i값을 1에서부터 10까지 1씩 증가시키면서 brace 내부를 실행하게 된다. 만약 어떤 조건이 맞아 next를 만나게 되면 이후 문장을 실행하지 않고, next iteration으로 넘어간다. 만약 break문을 만나게 되면 for loop를 벗어난다.