R은 동적 타입 언어라서 일반적으로 변수의 타입을 지정할 필요가 없어요. 가장 권장되는 할당 연산자는 <-예요.
x <- 42
avogadro <- 6.02e23
mystr <- "Hello, World!"
<- 대신 =를 사용해도 자주 동작하지만 항상 그런 것은 아니고, 좋지 않은 스타일이라 권장하지 않아요.
RStudio에서 작업한다면 키보드 단축키 Alt-minus로 입력할 수 있어요.
연산자는 대부분 일반적인 언어와 비슷하지만, %/%와 %%는 눈여겨봐요:
2 + 3 # 5
2 - 3 # -1
2 * 3 # 6
2 / 3 # 0.6666667
8 %/% 3 # 2 (integer division)
8 %% 3 # 2 (remainder)
2 ^ 3 # 8 (exponential)
R에서 #는 한 줄 주석을 시작해요.
여러 줄 주석을 위한 별도의 문법은 없어요.
함수를 정의하려면 이렇게 해요:
squareit <- function(x) {
x * x
}
함수는 인자를 하나도 받지 않거나 여러 개 받을 수 있고, 인자들은 쉼표로 구분해요.
매개변수가 하나도 없더라도 function()에는 괄호 ()가 필요해요.
함수 인자에는 기본값을 지정할 수 있어요. 다만 기본값이 있는 인자는 기본값이 없는 인자들 뒤에 와야 하고, 기본값을 지정할 때는 <-가 아니라 =를 사용해요.
별로 쓸모는 없지만 예를 하나 들어볼게요:
squareit <- function(x = 42) {
x * x
}
squareit()
#> [1] 1764
한 줄짜리 함수 본문에는 중괄호 { }가 꼭 필요한 것은 아니지만, 포함하는 것이 좋은 스타일로 여겨져요.
R은 위 예제들처럼 함수의 마지막 값을 자동으로 반환해요.
return()을 함수 본문 어디에서든 사용해서 반환값을 명시적으로 지정할 수 있어요.
함수를 호출하는 방법은 다른 여러 언어와 같아요:
squareit(3)
#> [1] 9
이 연습 문제에서는 좋아하는 요리책을 보고 멋진 라자냐를 만들 수 있도록 도와주는 코드를 작성해요.
라자냐를 조리하는 데 걸리는 시간과 관련된 네 가지 과제가 있어요.
매개변수를 받지 않고, 라자냐가 오븐에 있어야 하는 시간(분)을 반환하는 expected_minutes_in_oven() 함수를 정의해요. 요리책에 따르면 오븐에 있어야 할 예상 시간은 60분이에요.
> expected_minutes_in_oven()
[1] 60
라자냐가 지금까지 오븐에 있던 실제 시간(분)을 매개변수로 받아서, 앞선 과제에서 구한 오븐에 있어야 할 예상 시간(분)을 기준으로 라자냐가 오븐에 더 있어야 하는 시간(분)을 반환하는 remaining_time_in_minutes 함수를 정의해요.
> remaining_time_in_minutes(50)
[1] 10
라자냐에 넣은 층 수를 매개변수로 받아서, 각 층을 준비하는 데 2분이 걸린다고 가정했을 때 라자냐를 준비하는 데 걸린 시간(분)을 반환하는 prep_time_in_minutes() 함수를 정의해요.
> prep_time_in_minutes(2)
[1] 4
두 개의 인자를 받는 elapsed_time_in_minutes 함수를 정의해요. 첫 번째 인자는 라자냐에 넣은 층 수이고, 두 번째 매개변수는 라자냐가 오븐에 있던 시간(분)이에요. 이 함수는 라자냐 요리에 총 몇 분을 들였는지를 반환해야 하는데, 이는 준비 시간(분)과 현재까지 라자냐가 오븐에서 보낸 시간(분)을 더한 값이에요.
> elapsed_time_in_minutes(3, 20)
[1] 26
Exercism에 가입하고 R 트랙을 개념 21개연습 문제 111개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.