R 시작하기 - 콘솔·스크립트·도움말
이 장에서 배우는 것
이 책은 동네 편의점 한 곳의 판매 기록(날짜·상품·분류·수량·금액)을 R 로 분석하는 과정을 따라간다. 이 장은 그 출발점이다. 데이터를 다루기 전에 R 이 내 컴퓨터에 제대로 설치되어 있는지 확인하고, R 에게 일을 시키는 세 가지 방법(콘솔, 스크립트, Rscript)을 구분하고, 값에 이름을 붙이는 대입과 모르는 함수를 스스로 찾아보는 도움말, 그리고 파일을 어디에서 읽고 쓰는지를 정하는 작업 디렉터리를 익힌다. 엑셀에서 셀에 값을 넣고 수식을 고치고 파일을 저장하던 경험이 있다면 각 개념을 그것에 견주어 이해할 수 있다.
- R 과 RStudio 가 설치되어 있는지, 버전이 4.5 이상인지 확인한다.
- 콘솔(console)에서 한 줄씩 실행하는 방식과 스크립트(script) 파일을
Rscript로 한 번에 실행하는 방식의 차이를 설명한다. - 대입 연산자
<-로 값에 이름을 붙이고, 이름 규칙과 대소문자 구분을 지킨다. ?와example()로 함수의 사용법을 찾아본다.- 작업 디렉터리를 확인하고 바꾸며, 상대 경로로 파일을 읽고 쓴다.
문제 상황
편의점 사장님이 그날 팔린 물건을 정리해 달라고 부탁했다고 하자. 지금까지는 엑셀에 날짜, 상품, 수량, 금액을 적고 합계 수식을 넣어 왔다. 이번에는 같은 일을 R 로 해서 다음 달에도 같은 방식으로 되풀이하고 싶다. 그런데 처음 R 을 켜면 몇 가지가 막막하다.
어디에 무엇을 입력하는지 모르겠고, 입력한 결과가 어디에 남는지도 모르겠다. 어제 만든 계산을 오늘 다시 하려면 무엇을 저장해야 하는지 알 수 없다. 동료가 보내 준 코드가 "파일을 찾을 수 없다"는 오류를 내는데, 같은 코드가 동료의 컴퓨터에서는 잘 돌아간다고 한다. 모르는 함수 이름이 나오면 검색 엔진에 의존하게 되는데, 책마다 설명이 조금씩 달라 혼란스럽다.
이 장은 이 막막함을 줄이는 데 집중한다. 계산 자체는 곱셈과 덧셈 수준으로 충분하다. 대신 "코드를 파일로 남긴다", "다른 사람이 같은 명령으로 같은 결과를 얻는다", "모르는 것은 R 안에서 찾는다", "파일 위치를 코드가 스스로 관리한다"는 습관을 처음부터 들인다.
설치 확인과 실행 방식 세 가지
R 과 RStudio 설치 확인
R 은 통계 계산과 자료 분석을 위한 언어이자 실행 환경이다. CRAN 에서 macOS 용 설치 파일을 받거나, Linux 는 배포판의 패키지 관리자로 설치한다. RStudio 는 R 을 편하게 쓰도록 화면을 나눠 주는 편집기다. R 을 대체하는 것이 아니라 R 위에서 돌아가므로, R 을 먼저 설치한 다음 Posit 의 내려받기 페이지에서 RStudio Desktop 을 설치한다. 이 책의 모든 코드는 RStudio 없이 터미널만으로도 돌아가므로 RStudio 는 선택 사항이다.
설치가 끝났으면 터미널에서 다음 두 명령을 실행한다.
R --version
Rscript --version
첫 줄이 R version 4.5.1 처럼 4.5 이상의 버전으로 시작하면 된다. 세부 숫자와 날짜는 설치 시점에 따라 다르다. 명령을 찾을 수 없다는 메시지가 나오면 설치가 끝나지 않았거나 실행 파일 위치가 PATH 에 잡혀 있지 않은 것이다. 이 책은 4.5 이상을 기준으로 쓰였으므로 그보다 낮은 버전이면 먼저 갱신한다.
콘솔, 스크립트, Rscript
R 에게 일을 시키는 방법은 크게 세 가지다. 터미널에서 R 을 입력하거나 RStudio 의 Console 창을 열면 콘솔이 나온다. 콘솔은 > 기호가 깜박이는 대화창이다. 한 줄을 입력하고 Enter 를 누르면 R 이 바로 계산해 답한다. 엑셀에서 빈 셀에 수식을 넣어 보는 것과 비슷하다. 다만 창을 닫으면 입력한 내용이 사라진다.
$ R
> price_cola <- 1500
> price_cola
[1] 1500
> q("no")
위는 콘솔에서의 짧은 대화 예시다. 시작할 때 나오는 안내 문구는 생략했다. q("no") 는 작업 내용을 저장하지 않고 R 을 끝내라는 뜻이다. 인자 없이 q() 만 입력하면 작업 공간을 저장할지 묻는다.
스크립트는 R 명령을 순서대로 적어 둔 텍스트 파일이다. 확장자는 .R 이고, 이 책의 완성 코드는 모두 main.R 이라는 스크립트 한 파일이다. 엑셀의 통합 문서가 값과 수식을 같이 저장하듯이, 스크립트는 "어떤 순서로 무엇을 했는가"를 저장한다. RStudio 에서는 Source 창에서 커서가 있는 줄을 Cmd+Enter(Linux 는 Ctrl+Enter)로 실행할 수 있다. 다만 이 방식은 어떤 줄을 어떤 순서로 눌렀는지가 기록에 남지 않는다. 그래서 결과를 공유해야 할 때는 파일 전체를 처음부터 끝까지 한 번에 실행하는 방식을 쓴다.
그 방식이 Rscript 다. 터미널에서 Rscript main.R 을 입력하면 새 R 세션이 열리고, 파일을 위에서 아래로 실행하고, 끝나면 세션이 닫힌다. 콘솔에서 미리 만들어 둔 변수가 있어도 이 실행에는 영향을 주지 않는다. 그 덕분에 누가 언제 실행해도 같은 결과가 나온다.
| 방식 | 실행 방법 | 잘 맞는 일 | 기록이 남는가 |
|---|---|---|---|
| 콘솔 | 한 줄 입력 후 Enter | 계산 확인, 함수 시험 | 남지 않는다 |
| RStudio 에서 줄 실행 | Cmd/Ctrl + Enter | 코드를 고쳐 가며 탐색 | 파일은 남지만 실행 순서는 남지 않는다 |
| Rscript | Rscript main.R | 최종 결과, 반복 실행 | 파일과 실행 순서가 모두 남는다 |
실무에서는 콘솔이나 RStudio 로 시험하며 코드를 짜고, 마지막에는 항상 Rscript 로 처음부터 돌려 같은 결과가 나오는지 확인하는 흐름이 안전하다. 이 책의 예제도 그 순서를 따른다.
값에 이름 붙이기와 도움말 찾기
대입 연산자 <-
엑셀에서는 셀 주소(B2)가 값을 가리키는 이름이다. R 에서는 내가 이름을 정한다. 값에 이름을 붙이는 일을 대입(assignment)이라 하고, 화살표 모양의 <- 로 쓴다. 오른쪽 값을 왼쪽 이름에 붙인다고 읽으면 된다.
price_cola <- 1500
sold_cola <- 12
revenue <- price_cola * sold_cola
대입은 화면에 아무것도 출력하지 않는다. 값을 보려면 이름만 입력하거나 print() 를 쓴다. 콘솔에서 이름만 입력하면 [1] 18000 처럼 출력되는데, 앞의 [1] 은 "이 줄의 첫 값이 1번째"라는 위치 표시다. 값이 하나뿐일 때는 무시해도 된다. 그 의미는 다음 장에서 값이 여러 개인 경우와 함께 다룬다.
같은 이름에 다시 대입하면 이전 값은 사라지고 새 값으로 바뀐다. sold_cola <- sold_cola + 3 은 "현재의 sold_cola 에 3 을 더한 값을 다시 sold_cola 에 붙인다"는 뜻이다. 엑셀에서 셀 하나를 덮어쓰는 것과 같지만, 다른 셀의 수식이 자동으로 다시 계산되지는 않는다. R 은 대입한 시점의 값으로 계산해 두고 끝낸다. 그래서 sold_cola 를 바꾼 뒤에 revenue 를 구하는 줄을 다시 실행해야 새 매출이 나온다.
이름을 지을 때는 몇 가지 규칙이 있다. 글자, 숫자, 마침표, 밑줄을 쓸 수 있고 숫자로 시작할 수 없다. 대문자와 소문자를 구분하므로 revenue 와 Revenue 는 서로 다른 이름이다. 이 책은 소문자와 밑줄을 쓰는 price_cola 형태로 통일한다. 또 T, F, c 처럼 R 이 이미 쓰는 짧은 이름은 피한다. 덮어써도 오류가 나지 않지만 나중에 읽는 사람이 헷갈린다.
R 에서는 = 로도 대입할 수 있다. 맨 바깥 줄에서는 두 표기가 같은 결과를 내지만, 함수의 인자를 지정하는 자리에서는 = 의 뜻이 달라진다. 그래서 대입에는 <- 만 쓰는 것이 관례다. RStudio 에서는 Option+-(Linux 는 Alt+-)를 누르면 공백까지 포함한 <- 가 입력된다.
| 엑셀에서 하던 일 | R 에서의 대응 | 이 장의 예 |
|---|---|---|
| 셀에 값을 넣는다 | 대입 <- | price_cola <- 1500 |
| 함수 설명을 본다 | 도움말 ?, example() | ?sd |
| 파일이 있는 폴더를 연다 | 작업 디렉터리 getwd(), setwd() | setwd("out") |
| 통합 문서를 저장한다 | 스크립트 파일 저장 | main.R |
도움말 ? 와 example()
R 에는 수천 개의 함수가 있고, 그 사용법은 R 안에 들어 있다. 콘솔에서 ?sd 또는 help("sd") 를 입력하면 sd 함수의 도움말 페이지가 열린다. 터미널에서 열릴 때는 스페이스바로 넘기고 q 로 닫는다. RStudio 에서는 Help 창에 나온다. 도움말은 대체로 같은 순서로 구성된다.
- Description: 함수가 하는 일을 한두 문장으로 설명한다.
- Usage: 함수를 부르는 형식과 인자(함수에 넘기는 값)의 이름, 기본값이 나온다.
- Arguments: 각 인자의 뜻이 나온다.
- Value: 함수가 돌려주는 값이 무엇인지 나온다.
- Examples: 바로 실행해 볼 수 있는 예제가 나온다.
처음에는 Usage 와 Examples 만 봐도 충분하다. 예제는 example(sd) 처럼 입력하면 Examples 항목의 코드를 R 이 대신 실행해 결과까지 보여 준다. 함수 이름을 모르고 주제만 아는 경우에는 ?? 뒤에 영어 단어를 적어 도움말 전체를 검색한다.
도움말은 대화형 화면을 전제로 만들어졌다. Rscript 로 실행하는 스크립트 안에 ?sd 를 넣으면 도움말 본문이 결과 출력에 섞여 나올 수 있으므로, 도움말은 콘솔에서 확인하고 스크립트에는 넣지 않는다. 대신 함수의 인자 이름만 코드로 확인하고 싶을 때는 formals() 를 쓴다. 이 장의 완성 코드가 그 예다. 외부 공식 문서를 볼 때는 R 버전과 맞는지 확인한다. 기능이 버전에 따라 조금씩 달라지기 때문이다.
작업 디렉터리와 파일 경로
R 이 파일을 읽거나 쓸 때 경로를 이름만 적으면 "지금 서 있는 폴더"를 기준으로 찾는다. 그 폴더를 작업 디렉터리(working directory)라 한다. getwd() 는 현재 작업 디렉터리를 알려 주고, setwd("폴더") 는 그것을 바꾼다. Rscript main.R 로 실행하면 작업 디렉터리는 명령을 입력한 터미널의 현재 폴더가 된다. main.R 이 들어 있는 폴더가 아니라는 점에 주의한다. 다른 폴더에서 Rscript 다른/경로/main.R 로 실행하면 기준도 그 폴더가 된다.
경로는 두 가지 방식으로 적는다. 상대 경로는 작업 디렉터리에서 출발한다. "sales.csv", "out/sales.csv" 가 그 예다. 전체 경로는 루트(/)부터 적는다. "/Users/kim/project/sales.csv" 가 그 예다. 전체 경로는 내 컴퓨터에서만 유효하므로 코드에 적어 넣으면 다른 사람의 컴퓨터에서 오류가 난다. 이 책은 상대 경로를 쓰고, 폴더와 파일 이름을 이을 때는 file.path("out", "sales.csv") 처럼 file.path() 를 쓴다. 운영체제에 맞는 구분자를 넣어 주기 때문이다.
그림처럼 setwd("out") 을 실행하면 이후의 상대 경로는 out 폴더 안에서 해석된다. 스크립트 안에서 작업 디렉터리를 바꿨다면 일이 끝난 뒤에 원래 위치로 돌려놓는 편이 좋다. 완성 코드는 처음 위치를 변수에 저장해 두었다가 setwd() 로 돌아온다. 폴더 이동 없이 file.path() 로 필요한 파일을 직접 가리키는 방식이 더 단순하고 안전할 때가 많으며, 이 방식은 연습 문제에서 다룬다.
완성 코드
아래 파일 하나가 이 장의 전부다. 실행 환경을 확인하고, 매출을 대입으로 계산하고, 함수의 인자를 살펴보고, 작업 디렉터리를 오가며 판매 기록 CSV 를 직접 써 본다. 값 여러 개를 묶는 c() 는 여기서는 문자열 네 줄을 묶는 데만 쓰고, 그 의미는 다음 장에서 배운다. 한글이 깨지지 않으려면 터미널이 UTF-8 이어야 한다. macOS 와 최근 Linux 는 기본이 UTF-8 이다.
main.R
# main.R - R 시작하기: 실행 환경, 대입, 도움말, 작업 디렉터리
# 실행: Rscript main.R
# 1. 실행 환경 확인
version_ok <- getRversion() >= "4.5.0"
cat("R 4.5 이상: ", version_ok, "\n", sep = "")
cat("실행 방식: ", if (interactive()) "콘솔" else "Rscript", "\n", sep = "")
# 2. 대입으로 이름 붙이기
price_cola <- 1500
price_ramen <- 1200
sold_cola <- 12
sold_ramen <- 7
revenue <- sold_cola * price_cola + sold_ramen * price_ramen
print(revenue)
sold_cola <- sold_cola + 3
revenue <- sold_cola * price_cola + sold_ramen * price_ramen
cat("콜라 3개 추가 후 매출: ", revenue, "원\n", sep = "")
cat("Revenue 라는 이름이 있는가: ", exists("Revenue"), "\n", sep = "")
# 3. 함수의 사용법 확인 (도움말 ? 는 콘솔에서 쓴다)
cat("sd() 의 인자: ", paste(names(formals(sd)), collapse = ", "), "\n", sep = "")
# 4. 작업 디렉터리
start_dir <- getwd()
dir.create("out", showWarnings = FALSE)
setwd("out")
cat("작업 디렉터리 이름: ", basename(getwd()), "\n", sep = "")
lines <- c(
"date,item,category,qty,amount",
"2026-03-02,콜라,음료,3,4500",
"2026-03-02,컵라면,식품,2,2400",
"2026-03-03,삼각김밥,식품,4,5600"
)
writeLines(lines, "sales.csv")
cat("sales.csv 가 있는가: ", file.exists("sales.csv"), "\n", sep = "")
cat("첫 줄: ", readLines("sales.csv", n = 1), "\n", sep = "")
setwd(start_dir)
cat("원래 위치로 복귀: ", identical(getwd(), start_dir), "\n", sep = "")
csv_path <- file.path("out", "sales.csv")
cat(csv_path, " 가 있는가: ", file.exists(csv_path), "\n", sep = "")
cat("sales.csv 의 줄 수: ", length(readLines(csv_path)), "\n", sep = "")
줄별 해설
1 부분. getRversion() 은 설치된 R 의 버전을 돌려주고, >= "4.5.0" 으로 그 값이 4.5.0 이상인지 비교한다. 결과는 참(TRUE) 또는 거짓(FALSE)이며, 이를 version_ok 에 대입했다. 버전 문자열을 그대로 출력하면 컴퓨터마다 결과가 달라지므로 참·거짓만 출력한다. cat() 은 값들을 이어 붙여 출력하는 함수이고, sep = "" 는 값 사이에 공백을 넣지 않겠다는 뜻이다. 끝의 "\n" 은 줄바꿈이다. interactive() 는 콘솔처럼 대화형으로 실행 중일 때 TRUE 를 돌려준다. Rscript 로 실행하면 FALSE 이므로 "Rscript" 가 출력된다.
2 부분. 콜라와 컵라면의 가격, 판매량에 이름을 붙이고 매출을 계산한다. 12 × 1500 + 7 × 1200 = 26400 이다. print(revenue) 는 [1] 26400 형태로 출력한다. 그 뒤에 sold_cola 를 15 로 바꾸고 revenue 를 다시 계산한다. 15 × 1500 + 7 × 1200 = 30900 이다. 매출을 구하는 식을 두 번 적은 것은, 대입이 그 시점의 값으로만 계산된다는 점을 보여 주려는 것이다. 이 반복을 줄이는 방법은 뒤에서 함수를 만들 때 배운다. exists("Revenue") 는 그 이름이 존재하는지 묻는데, 대문자로 시작하는 이름은 만든 적이 없으므로 FALSE 다.
3 부분. formals(sd) 는 sd 함수가 받는 인자의 목록을 돌려주고, names() 로 이름만 뽑아 paste(..., collapse = ", ") 로 쉼표로 이어 붙였다. 도움말의 Usage 항목에서 보는 것과 같은 정보를 코드로 꺼낸 셈이다. 인자 na.rm 의 뜻은 결측값을 다루는 장에서 나온다.
4 부분. start_dir 에 지금 위치를 저장한다. dir.create("out", showWarnings = FALSE) 는 out 폴더를 만든다. 이미 있어도 경고 없이 넘어간다. setwd("out") 으로 들어간 뒤 basename(getwd()) 로 폴더 이름만 출력한다. 전체 경로를 출력하면 컴퓨터마다 달라지기 때문이다. lines 는 판매 기록 네 줄(머리글 한 줄과 데이터 세 줄)이고, writeLines() 가 그것을 sales.csv 로 쓴다. 이 파일은 out 안에 만들어진다. file.exists() 로 파일이 있는지, readLines(..., n = 1) 로 첫 줄만 읽어 확인한다. 이어서 setwd(start_dir) 로 돌아오고 identical() 로 같은 위치인지 비교한다. 마지막으로 돌아온 위치에서 file.path("out", "sales.csv") 라는 상대 경로가 같은 파일을 가리키는지 확인하고, 파일의 줄 수를 센다.
실행 결과
main.R 이 있는 폴더에서 다음과 같이 실행한다. 실행하면 같은 폴더에 out 폴더가 생기고 그 안에 sales.csv 가 만들어진다.
$ Rscript main.R
R 4.5 이상: TRUE
실행 방식: Rscript
[1] 26400
콜라 3개 추가 후 매출: 30900원
Revenue 라는 이름이 있는가: FALSE
sd() 의 인자: x, na.rm
작업 디렉터리 이름: out
sales.csv 가 있는가: TRUE
첫 줄: date,item,category,qty,amount
원래 위치로 복귀: TRUE
out/sales.csv 가 있는가: TRUE
sales.csv 의 줄 수: 4
첫 줄이 FALSE 라면 설치된 R 이 4.5 보다 낮은 것이다. 몇 번을 다시 실행해도 결과가 같은지 확인해 본다. 같지 않다면 코드에 컴퓨터마다 달라지는 값이 섞여 있다는 뜻이다.
실무에서 자주 틀리는 것
이름의 대소문자와 오타
R 은 revenue 와 Revenue 를 다른 이름으로 본다. 틀린 코드는 다음과 같다.
revenue <- 26400
cat("매출: ", Revenue, "원\n", sep = "")
이 코드는 object 'Revenue' not found 라는 오류를 내고, Rscript 는 그 줄에서 실행을 멈춘다. 오류 메시지가 가리키는 이름을 그대로 찾아 스크립트 위쪽의 대입과 비교하면 대부분 바로 찾는다. 고친 코드는 이름을 같게 쓴 것이다.
revenue <- 26400
cat("매출: ", revenue, "원\n", sep = "")
<- 앞뒤 공백을 빼먹기
공백 없이 x<-5 라고 쓰면 R 은 "x 에 5 를 대입"으로 읽는다. 그런데 "x 가 -5 보다 작은가"를 묻고 싶었다면 뜻이 완전히 달라진다.
sold_cola<-5 # 대입으로 읽힌다. 비교가 아니다
비교할 의도라면 공백을 넣어 두 기호를 분리한다. 공백을 넣는 습관은 이런 혼동을 막고 코드를 읽기 쉽게 한다.
sold_cola <- 5 # 대입
sold_cola < -5 # 비교: FALSE
작업 디렉터리를 가정하고 파일을 읽기
동료의 컴퓨터에서는 되는데 내 컴퓨터에서는 안 되는 대표 사례다.
lines <- readLines("sales.csv")
setwd("/Users/kim/project") # 내 컴퓨터에만 있는 전체 경로
첫 줄은 sales.csv 가 현재 작업 디렉터리에 없으면 파일을 열 수 없다는 오류를 내고, 둘째 줄은 다른 사람의 컴퓨터에 그 폴더가 없어 실패한다. 고치는 방법은 두 가지다. 코드를 실행하는 터미널의 현재 폴더를 프로젝트 폴더로 맞추거나, 폴더 구조를 상대 경로로 적는다.
csv_path <- file.path("out", "sales.csv")
lines <- readLines(csv_path)
오류가 나면 먼저 getwd() 로 R 이 어느 폴더에서 찾고 있는지 출력해 본다. 원인의 절반은 이것으로 드러난다.
콘솔에서 만든 값에 기대는 스크립트
콘솔에서 price_cola <- 1500 을 입력해 둔 채로 스크립트 파일에는 그 줄을 적지 않으면, 내 화면에서는 돌아가는데 Rscript 로 돌리면 이름을 찾을 수 없다는 오류가 난다. Rscript 는 언제나 빈 세션에서 시작하기 때문이다.
# 틀린 스크립트: price_cola 를 어디에서도 만들지 않았다
revenue <- price_cola * 12
스크립트에 필요한 값은 모두 스크립트 안에서 만든다. 파일을 저장한 뒤에는 세션을 다시 시작하거나 터미널에서 Rscript 로 처음부터 돌려 본다.
price_cola <- 1500
revenue <- price_cola * 12
한눈에 보기
| 도구 | 하는 일 | 예 |
|---|---|---|
R --version | 설치와 버전을 확인한다 | 4.5 이상인지 본다 |
Rscript 파일.R | 스크립트를 처음부터 끝까지 실행한다 | Rscript main.R |
<- | 값에 이름을 붙인다 | revenue <- 26400 |
print(), cat() | 값을 화면에 출력한다 | cat("합계: ", revenue, "\n", sep = "") |
?함수, example() | 사용법과 예제를 본다(콘솔에서) | ?sd, example(sd) |
getwd(), setwd() | 작업 디렉터리를 확인하고 바꾼다 | setwd("out") |
file.path() | 폴더와 파일 이름을 이어 경로를 만든다 | file.path("out", "sales.csv") |
이 책의 예제는 base R 만 사용한다. 외부 패키지가 필요한 기능은 설치 없이 base R 로 다룬다. tidyverse 는 뒤의 장에서 같은 일을 하는 도구를 만났을 때 대응표로만 소개한다.
연습 문제
- 삼각김밥의 가격을
price_gimbap(1400), 판매 개수를sold_gimbap(5)로 대입하고, 매출을revenue_gimbap에 저장해print()로 출력하는Rscript용 스크립트를 써 보라. 이어서 판매 개수를 8 로 바꿔 매출을cat()으로 "매출: ○○원" 형태로 출력하라. - 콘솔에서
?round를 열어 Usage 항목을 읽고digits인자의 기본값을 찾아라. 그리고round(1234.5678, 2)와round(1234.5678, -2)의 결과를 예상해 보라. - 작업 디렉터리를 바꾸지 않고(
setwd()를 쓰지 않고)memo폴더를 만들어 그 안에note.txt를 쓰고, 파일이 있는지 출력하는 스크립트를 써 보라. 파일 안에는 "첫 기록" 한 줄을 넣는다. - 다음 스크립트를
Rscript로 실행하면 어떻게 되는지 설명하고 고쳐라.price_ramen <- 1200 revenue <- Price_ramen * 7 cat("매출: ", revenue, "원\n", sep = "")
정답과 해설
1번. 대입, 출력, 재대입, 재계산의 순서를 따르면 된다.
price_gimbap <- 1400
sold_gimbap <- 5
revenue_gimbap <- price_gimbap * sold_gimbap
print(revenue_gimbap)
sold_gimbap <- 8
revenue_gimbap <- price_gimbap * sold_gimbap
cat("매출: ", revenue_gimbap, "원\n", sep = "")
출력은 [1] 7000 과 매출: 11200원 이다. 판매 개수만 바꾸고 매출 계산 줄을 다시 실행하지 않으면 매출은 7000 으로 남는다. 대입은 그 시점의 값으로 계산해 두는 것이기 때문이다.
2번. Usage 에는 round(x, digits = 0, ...) 로 나오므로 digits 의 기본값은 0 이다. 소수점 아래를 남기지 않고 반올림한다는 뜻이다. round(1234.5678, 2) 는 소수 둘째 자리까지 남겨 1234.57 이고, round(1234.5678, -2) 는 음수 자릿수가 "백의 자리로 반올림"을 뜻해 1200 이다. 콘솔에서 직접 입력해 확인해 본다. 스크립트에 ?round 를 넣지 않는 이유는 본문에서 설명한 대로다.
3번. 폴더 이동 없이 file.path() 로 파일 위치를 만든다.
dir.create("memo", showWarnings = FALSE)
note_path <- file.path("memo", "note.txt")
writeLines("첫 기록", note_path)
cat(note_path, " 가 있는가: ", file.exists(note_path), "\n", sep = "")
출력은 memo/note.txt 가 있는가: TRUE 다. 작업 디렉터리를 바꾸지 않으므로 나중에 원래 위치로 돌아오는 코드를 쓰지 않아도 된다. 폴더가 이미 있어도 경고가 나지 않게 showWarnings = FALSE 를 붙였다.
4번. 둘째 줄의 Price_ramen 은 대문자로 시작하므로 첫 줄에서 만든 price_ramen 과 다른 이름이다. 실행하면 object 'Price_ramen' not found 오류가 나고 그 줄에서 멈춰 세 번째 줄은 실행되지 않는다. 이름을 price_ramen 으로 통일하면 매출: 8400원 이 출력된다.