작성자: admin 작성일시: 2016-09-13 15:14:35 조회수: 182 다운로드: 26
카테고리: R 태그목록:

R에서 여러 개의 자료를 한 변수에 담기

지금까지는 하나의 변수에 하나의 자료를 저장했다. 그러나 R에서는 하나의 변수에 여러 개의 자료를 한꺼번에 저장하고 필요한 때에 꺼내 쓸 수도 있다.

R에서 하나의 변수에 여러 개의 자료를 저장하고 쓰는데는 리스트(list) 자료형을 사용한다.

자료의 순서만 있는 경우

리스트 자료형에는 여러개의 자료를 순서에 따라 저장할 수 있다. 리스트 자료형 변수는 다음과 같이 만든다.

리스트변수 <- list(자료1, 자료2, 자료3)

이 때 자료의 갯수는 얼마가 되든 상관없다.

In [1]:
x <- list(88, 90, 100)
In [2]:
x
  1. 88
  2. 90
  3. 100

인덱싱

리스트 자료형 변수에서 특정한 자료를 꺼내려면 인덱싱(indexing)이라는 연산을 사용한다.

인덱싱 연산을 하려면 다음과 같이 두 개의 대괄호(bracket)를 변수 이름 끝에 붙이고 그 안에 자료의 순서를 뜻하는 숫자를 넣는다.

리스트변수[[인덱스]]

이 때 자료의 순서를 뜻하는 숫자를 인덱스(index)라고 한다. R에서는 가장 첫번째 자료를 가리키는 인덱스는 1이다.

In [3]:
x[[1]]
88
In [4]:
x[[2]]
90
In [5]:
(x[[1]] + x[[2]]) / 2
89

연습 문제 1

  1. 시험 성적을 나타내는 임의의 5개의 숫자를 리스트 변수 score에 넣고 평균을 구한다.

자료의 이름이 있는 경우

리스트 자료형에 자료의 이름을 붙여서 저장하는 것도 가능하다. 이 경우에는 다음과 같이 등호 기호를 넣고 그 앞에 자료 이름을 명시한다.

리스트변수 = list(자료이름1=자료값1, 자료이름2=자료값2, 자료이름3=자료값3)

이 때 자료의 갯수는 얼마가 되든 상관없다.

이렇게 이름을 가지는 자료의 경우에는 보통 자료의 이름을 키(key)라고 하고 자료의 값을 값(value)라고 한다.

In [6]:
b <- list(math=88, english=90, history=100)
In [7]:
b
$math
88
$english
90
$history
100

리스트 변수에서 특정한 자료를 꺼낼때도 마찬가지로 인덱싱(indexing) 연산을 한다.

키를 이용하여 인덱싱 연산을 하는 경우에도 다음과 같이 두 개의 대괄호(bracket)를 변수 이름 끝에 붙이고 그 안에 자료의 키를 넣는다. 이 때 키는 문자열이므로 따옴표가 있어야 한다.

In [8]:
b[["math"]]
88
In [9]:
b[['english']]
90
In [10]:
(b[["math"]] + b[["english"]]) / 2
89

또는 다음과 같이 달러 기호를 변수 이름 끝에 붙이고 그 뒤에 자료의 키를 덧붙여서 인덱싱을 할 수도 있다. 이 때는 문자열에 따옴표가 있어도 되고 없어도 된다.

다만 키 문자열에 공백(space)이 있는 경우에는 반드시 따옴표가 있어야 한다.

In [11]:
b$"math"
88
In [12]:
b$english
90
In [13]:
(b$"math" + b$"english") / 2
89
In [14]:
b2 <- list("my math"=88, english=90, history=100)
In [15]:
b2
$`my math`
88
$english
90
$history
100
In [16]:
b2[["my math"]]
88
In [17]:
b2$"my math"
88

R에서는 자료의 키는 변수 이름으로 쓸 수 있는 문자열이어야 한다. 즉, 숫자는 자료의 키로 넣을 수 없다.

In [18]:
b3 = list(1=10, 2=20)
Error in parse(text = x, srcfile = src): <text>:1:12: unexpected '='
1: b3 = list(1=
               ^
Traceback:

연습 문제 2

  1. 윤년이 아닌 평년의 경우에 각 달의 날짜 수를 저장하는 변수 days를 만든다.
    이 때 각 달을 표시하는 키는 두 글자짜리 문자열로 한다. 즉, 1월은 "01", 2월은 "02", 12월은 "12"로 한다.

  2. 변수 days를 이용하여 짝수 달의 평균 날짜 수를 구한다.

키를 가지는 자료를 숫자로 인덱싱하기

R의 리스트 자료형은 순서쌍의 특성과 키-값쌍의 특성을 모두 가지고 있기 때문에

  • 일부 자료만 키를 줄 수도 있고
  • 키를 가지는 자료를 숫자로 인덱싱할 수도 있다.
In [ ]:
c <- list(88, k1=90, 100)
In [ ]:
c
In [ ]:
c[["k1"]]
In [ ]:
c[[2]]

자료형이 다른 경우

리스트 변수에는 자료형이 같은 자료만 담을 수 있는 것은 아니고 자료형이 다른 자료들도 담을 수 있다. 예를 들어 정수형 자료와 실수형 자료, 그리고 문자열 자료를 한 리스트 변수에 넣는 것도 가능하다.

In [19]:
d <- list(1, 3.14, "pi")
In [20]:
d[[1]]
1
In [21]:
d[[2]]
3.14
In [22]:
d[[3]]
'pi'

심지어 리스트 변수에 또 다른 리스트 변수를 넣을 수도 있다.

In [23]:
e <- list(list(1, 10), list(2, 20))
In [27]:
e[[1]]
  1. 1
  2. 10
In [28]:
e[[2]]
  1. 2
  2. 20
In [29]:
e[[1]][[1]]
1
In [30]:
e[[1]][[2]]
10
In [31]:
e[[2]][[1]]
2
In [32]:
e[[2]][[2]]
20

질문/덧글

아직 질문이나 덧글이 없습니다. 첫번째 글을 남겨주세요!