변수?? 객체??

다른 언어에서 보통은 숫자, 문자 등을 담는 것을 변수라고 이야기하는데 R에서는 객체(Object)라고 합니다. 그런데 변수와 객체를 혼용해서 사용하는 경우가 많기 때문에 편의상 변수라고 하겠습니다.

변수를 만들고 값을 지정하는 과정에서 주의해야할 점이 있습니다.

1. 변수 생성시 이름에 문자, 숫자, 밑줄(_), 마침표(.)는 사용이 가능합니다. Python에서 마침표 사용이 불가능한 점과 차이가 있습니다. 띄어쓰기나 하이픈-은 사용할 수 없으며 첫 글자는 알파벳 또는 마침표(‘.’)으로 시작해야 합니다.

2. c는 combine으로 한 변수에 여러 개의 자료를 넣을 때 사용합니다. ex) c(1,2)

3. 오류 방지를 위해 함수 이름을 변수 이름으로 사용하지 않는 것을 추천합니다.



변수 생성

Python과 달리 R에서는 변수에 값을 입력할 때 등호(=) 대신에 화살표(<-)를 사용합니다.

a <- 3

다른 데이터 형의 변수를 생성해보고 연산을 실행해봅시다.

# 숫자형 변수
> i1 <-1 
> i2 <-2

# 문자형 변수
> c1 <- '10'

# 날짜형 변수
> d1 <- Sys.Date()

# 숫자 + 숫자
> i1 + i2
[1] 3

# 숫자 + 문자
> i1 + c1
Error in i1 + c1 : 이항연산자에 수치가 아닌 인수입니다

# 날짜 +  숫자
> i1 + d1
[1] "2020-10-05"

여기서 알 수 있는 점은 R은 SQL처럼 묵시적 형 변환이 일어나지 않는다는 것입니다. SQL에서는 1 + '10'은 묵시적 형 변환에 의해 11으로 계산이 되는데 R에서는 이를 허용하지 않습니다. 사실 묵시적 형 변환은 대부분의 프로그래밍 언어에서 쓰지 않습니다. 묵시적 형 변환이 일어나지 않기 때문에 형 변환 함수가 필요합니다.

형 변환 함수

as.numeric()   #to_number

as.character() #to_char

as.Date()      #to_date

형 변환 함수를 실행했다고 해서 변수가 바로 변하는 것은 아니기 때문에 화살표로 변수 할당을 해주어야 해당 변수의 형이 바뀝니다.


변수 연속 생성

다음으로는 변수를 연속적으로 생성해보겠습니다. 1에서 10까지를 연속적으로 예로 만들어보겠습니다. 아래 스크립트에서 볼 수 있듯이 문자는 콜론(:)기호로 연속으로 생성이 불가능합니다.

> 1:10
 [1]  1  2  3  4  5  6  7  8  9 10
# c(1,2,3,4,5,6,7,8,9,10) 와 동일

> 'a':'f'
Error in "a":"f" : 인자의 값이 NA/NaN 입니다.
추가정보: 경고메시지(): 
1: 강제형변환에 의해 생성된 NA 입니다 
2: 강제형변환에 의해 생성된 NA 입니다 



변수 확인 및 제거

현재 어떤 변수가 생성되어 있는지 확인하는 함수도 살펴봅시다. 그리고 변수를 제거하는 함수도 실행해봅시다.

# 변수 확인 (두 함수 모두 같은 함수)
objects()
ls()

# 변수 지우기 
> rm(list = 'i1')
> i1
에러: 객체 'i1' 찾을  없습니다

# 변수 전체 지우기 
> rm(list = ls())

NA와 NULL

R에서의 NA와 NULL은 다른 프로그래밍에서의 동일 단어와 뜻이 다릅니다. SQL에서는 NULL입력시 빈 칸이 남아있는 반면에 R에서는 빈 칸조차 없는, 즉, 아무 것도 할당하지 않습니다.

# NA 할당시
> c(1,NA,2)
[1]  1 NA  2

# NULL 할당시
> c(1,NULL,2)
[1] 1 2

사칙 연산자

연산 기호는 아래 표에서 확인할 수 있습니다.

기호 의미 사용 예시
->결과
+ 더하기 5 + 6 = 11
- 빼기 5 - 4 = 1
* 곱하기 2 * 3 = 6
/ 나누기 4 / 2 = 2
%/% 정수 나누기 ’’
%% 나머지 구하기 5 %% 2 = 1
^, ** 승수 구하기 3^2 = 9