x = c(1,2,3,4,6)
y = c("1","2","3","4","5")
str(x) # num [1:5] 1 2 3 4 6
str(y) # chr [1:5] "1" "2" "3" "4" "5"
앞서서 변수들을 가지고 연산을 하려면 length
의 길이가 같아야 한다고 했다. 그렇다면 위의 경우에 x * y
를 하면 어떻게 될까?
x * y에서 다음과 같은 에러가 발생했습니다:이항연산자에 수치가 아닌 인수입니다
라고 오류가 발생한다. 이유는 위 코드에서 str
함수를 사용하면 알 수 있다.
이 함수는 structure(구조) 를 보여주는 함수이다. 위의 결과에서 알 수 있듯이 변수 'x'는 num 즉 숫자이고 변수 'y'는 chr 즉 문자열이다.
기본적으로 문자와 숫자의 곱은 불가능하다는 것을 알 수 있을 것이다. 그리고 여기서 또 알 수 있는 것이 R언어에서는 문자를 chr
로 나타낸다 파이썬에서 str
즉 'string' 으로 나타낸것과 다르다는 것을 알 수 있다.
파이썬에서 str
과 R에서 str
는 다르기 때문에 혼동하지 않도록 주의하자.
1 + 2 = 3 # 1 + 2 = 3에서 다음과 같은 에러가 발생했습니다:대입의 대상이 비언어적 객체로 확장됩니다
만약 위처럼 값을 입력하면 오류가 발생하는 것을 볼 수 있다. 우리는 단지 1 + 2 가 3인지 확인하려고 했는데 오류가 발생한 것이다. 그렇다면 어떻게 해야할까? 답은 간단하다.
1 + 2 == 3 # [1] TRUE
=
대신 ==
를 쓰면 된다. 아마 다른 언어를 공부한 사람이라면 이 둘의 차이를 알 수 있을 것이다. =를 하나만 사용하면 변수에 대입한다는 의미이고 ==를 쓰면 둘이 같다라는 의미로 해석하면 된다.
그렇기 때문에 1 + 2 = 3 을 하면 3을 1 + 2 에 대입한다는 의미인데 숫자에 숫자를 대입하는 것 부터 말이 안되기 때문에 오류가 발생하는 것이다.
그렇다면 여기서 드는 의문은 1 == "1"을 하면 어떻게 나올까?
1 == "1" # [1] TRUE
문자와 숫자가 같다고 하기 때문에 False
가 나올것 같지만 TRUE
가 나온다.
기본적으로 R 에서는 char "1" 과 num 1 은 같다고 인식한다.