2.1 스칼라(scalar)

  • 단일 차원의 값(하나의 값): \(1 \times 1\) 백터로 표현 \(\rightarrow\) R 데이터 객체의 기본은 벡터!!
  • 데이터 객체의 유형은 크게 숫자형, 문자열, 논리형이 있음
스칼라를 입력시 R의 벡터 지정 함수인 c()(벡터 부분에서 상세 내용 학습)를 꼭 사용해서 입력할 필요가 없다. 단, 연속되지 않은 두 개 이상 스칼라면 벡터이므로 꼭 c()를 써야 한다.

2.1.1 선언

  • 일반적으로 컴파일이 필요한 언어(예: C 언어)의 경우 변수 또는 객체를 사용 전에 선언이 필요
  • 위 코드에서 int x; 없이 x = 1을 입력 후 컴파일 하면 에러가 나타나지만 R 언어에서는 변수를 선언할 필요가 전혀 없음

  • z 가 어떤 데이터 타입인지 언급할 필요가 전혀 없음 \(\rightarrow\) Python, Perl, Matlab 등과 같은 스크립트 언어의 특징. 아래 코드 참조

[1] 3

2.1.2 숫자형

  • 정수형(integer)과 실수형(double)로 구분됨
  • 정수형 구분시 숫자 뒤 L을 표시
[1] "integer"
[1] "double"
  • 수치연산(+, -, *, ^, **, /, %%, %/%) 가능: R은 함수형 언어이기 때문에 앞에 기술한 연산자도 하나의 함수로 인식함.
  • 수치 연산자(operator) 및 기본 수학 함수
Table 2.1: R언어의 기본 수치 연산자
수치형 연산자 설명
+, -, *, / 사칙연산
n %% m n을 m 으로 나눈 나머지
n %/% m n을 m 으로 나눈 몫
n ^ m 또는 n ** m n 의 m 승

숫자형 스칼라 연산 적용 예시

[1] 3
[1] 10
[1] 13
[1] 7
[1] 30
[1] 3.333333
[1] 1000
[1] 1
[1] 3
[1] 20

2.1.3 문자형

  • 수치형이 아닌 문자 형식의 단일 원소
  • C와 같은 언어에서 볼수 있는 한개 문자에 대한 데이터 타입 존재하지 않음
  • 수치연산 불가능
  • 따옴표(" 또는 ')로 문자를 묶어서 문자열 표시
  • 문자열을 다루는 자세한 설명은 5주차에서 자세히 설명할 예정임
[1] "character"
[1] "character"
[1] "Hello CNU!!"
[1] "R is not too difficult."
[1] 11
[1] 23
Error in h1 - h2: 이항연산자에 수치가 아닌 인수입니다

2.1.4 논리형 스칼라

  • 참(TRUE, T) 또는 거짓(FALSE, F)를 나타내는 값
  • TRUE/FALSE: 예약어(reserved word)
  • T/F: TRUEFALSE로 초기화된 전역 변수
    • TFALSE 또는 어떤 값도 할당 가능 \(\rightarrow\) 가급적 TRUE/FALSE를 명시하는 것이 편함
  • 논리형 연산자(logical operator)
Table 2.2: R언어의 논리형 연산자
논리형 연산자 설명
& AND (vectorized)
&& AND (atomic)
| OR (vectorized)
|| OR (atomic)
! NOT
  • 비교 연산자를 적용할 경우 논리값을 반환
Table 2.3: R언어의 비교 연산자
비교 연산자 설명
> 크다(greater-than)
< 작다(less-than)
== 같다(equal)
>= 크거나 같다(greater than equal)
<= 작거나 같다(less than equal)
!= 같지 않다(not equal)
Note:
기술한 비교 연산자는 수치형 및 논리형 데이터 타입 모두에 적용 가능 하지만, 문자형은 비교 연산은 ==, != 만 가능함

참고

  • 논리형 스칼라도 숫자형 연산 가능 \(\rightarrow\) 컴퓨터는 TRUE/FALSE를 1과 0 숫자로 인식
  • 수치 연산자는 스칼라 뿐 아니라 아래에서 다룰 벡터, 행렬, 리스트, 데이터프레임 객체의 연산에 사용 가능
  • &/|&&/||는 동일하게 AND/OR를 의미하지만 연산 결과가 다름.
  • &의 연산 대상이 벡터인 경우 백터 구성 값 각각에 대해 & 연산을 실행 하지만 &&는 하나의 값(스칼라)에만 논리 연산이 적용(아래 예시 참고)
  • 논리형 스칼라의 논리 및 비교 연산 예시
[1] "logical"
[1] TRUE
[1] FALSE
[1] TRUE
[1] TRUE
[1] FALSE
[1] TRUE
[1] FALSE
Error in TRUE <- 1: 대입에 유효하지 않은 (do_set) 좌변입니다
Error in TRUE <- FALSE: 대입에 유효하지 않은 (do_set) 좌변입니다
[1] FALSE  TRUE FALSE  TRUE
[1] FALSE
[1] "logical"
[1] TRUE
[1] FALSE
[1] FALSE
[1] TRUE

2.1.5 결측값(missing value)

  • 결측치 지정 상수: NA \(\rightarrow\) R과 다른 언어의 가장 큰 차이점 중 하나
  • 예를 들어 4명의 통계학과 학생 중 3명의 통계학 개론 중간고사 점수가 각각 80, 90, 75점이고 4번 째 학생의 점수가 없는 경우 NA로 결측값 표현
  • is.na() 함수를 이용해 해당 값이 결측을 포함하고 있는지 확인
[1] NA
[1] TRUE

is.na(object_name): 객체를 구성하고 있는 원소 중 NA를 포함하고 있는지 확인 \(\rightarrow\) NA를 포함하면 TRUE, 아니면 FALSE 반환

참고: 자료에 NA가 포함된 경우 연산 결과는 모두 NA가 반환

[1] NA
[1] NA
[1] NA

2.1.6 NULL 값

  • NULL: 초기화 되지 않은 변수 또는 객체를 지칭함
  • is.null() 함수를 통해 객체가 NULL인지 판단
[1] TRUE
[1] FALSE

NANULL의 차이점: 자료의 공백을 의미한다는 점에서 유사한 측면이 있으나 아래 내용처럼 큰 차이가 있음

  • NULL: 값을 지정하지 않은 객체를 표현하는데 사용. 즉 아직 변수 또는 객체의 상태가 아직 미정인 상태를 나타냄
  • NA: 데이터 값이 결측임을 지정해주는 논리형 상수
[1] FALSE
logical(0)

2.1.7 무한대/무한소/숫자아님

  • Inf: 무한대(\(+\infty\), \(1/0\))
  • -Inf: 무한소(\(-\infty\), \(-1/0\))
  • NaN: 숫자아님(Not a Number, \(0/0\))
  • is.finite(), is.infinite(), is.nan() 함수를 통해 객체가 Inf 또는 NaN을 포함하는지 확인
[1] FALSE
[1] TRUE
[1] TRUE
[1] FALSE

지금까지 요인형(factor)을 제외하고 R 언어에서 객체가 가질 수 있는 데이터 유형에 대해 알아봄. 요인형은 4주 차에 예정된 “R 자료형: 팩터, 테이블, 데이터 프레임”에서 상세하게 배울 예정임.