이경수 선생님의 수학실험실

R List indexing 본문

R

R List indexing

(이경수) 2021. 4. 21. 11:05

아래 예시에서 x는 a, b라는 이름의 벡터로 구성된 리스트이다. a는 숫자형(numeric), b는 문자형(character) 데이터이다. list의 각 요소에 접근하여 데이터를 수정하거나 삭제해야 한다면 [ ]를 두 번 겹쳐서 x[[1]], x[[2]]와 같이 나타내면 된다. 더 세부적으로 리스트의 첫번째 인자에서 k번째 데이터의 접근은 x[[1]][k]와 같이 나타내면 된다.

> x <- list(a=c(1,2,3), b=c("y","n","y"))
> x
$a
[1] 1 2 3

$b
[1] "y" "n" "y"

> x[[1]] <- c(4,5,6)
> x
$a
[1] 4 5 6

$b
[1] "y" "n" "y"

> x[[1]][2:3] <- c(7,8)
> x
$a
[1] 4 7 8

$b
[1] "y" "n" "y"

 

마찬가지로 list에서 2번째 요소의 2번째 데이터는 x[[2]][2]와 같이 접근하면 되겠다. 

> x[[2]][2] <- "y"
> x
$a
[1] 4 7 8

$b
[1] "y" "y" "y"

 

데이터에 접근하는 또다른 방법은 '$'를 이용하는 것이다. x$a는 x[[1]]와 같은 의미이다.(list x의 첫번째 요소의 이름이 a이다.)

> x$a <- c(11,12,13)
> x
$a
[1] 11 12 13

$b
[1] "y" "y" "y"

 

그러면 x[1]과 x[[1]]은 어떤 차이를 갖는 것일까?

> x[1]
$a
[1] 11 12 13

> x[[1]]
[1] 11 12 13

 

datatype을 확인해 보니, x[[1]]는 numeric, x[1]는 list이다. 'x[1] <- c(4,5,6)'는 list에 numeric형 자료를 넣는 표현으로 경고 메시지가 뜨게 만든다. 괄호를 하나만 쓰고자 할 때는 x[1] <- list(c(1,2,3)) 와 같이 표현하는 것이 맞겠다.

> class(x[[1]])
[1] "numeric"
> class(x[1])
[1] "list"
> x[[1]] <- c(1,2,3)
> x
$a
[1] 1 2 3

$b
[1] "y" "y" "y"

> x[1] <- c(4,5,6)
경고메시지(들): 
In x[1] <- c(4, 5, 6) :
  number of items to replace is not a multiple of replacement length
> x[1] <- list(c(1,2,3))
> x
$a
[1] 1 2 3

$b
[1] "y" "y" "y"

'R' 카테고리의 다른 글

R Text mining  (0) 2021.04.21
R function_example3  (0) 2021.04.20
R function_example2  (0) 2021.04.20
R function_example1  (0) 2021.04.20
R의 데이터 타입_배열(array)  (0) 2021.04.20
Comments