Atomic vectors
가장 기본적인 벡터 구조이다.
> x <- c(2.1, 4.2, 3.3, 5.4)
> x
[1] 2.1 4.2 3.3 5.4
vector에는 타입이 같은 다양한 값이 들어 갈 수 있다.
> x[c(3,1)]
[1] 3.3 2.1
x에 해당하는 인덱스의 값들을 찾아준다.
> order(x)
[1] 1 3 2 4
x를 오름차순으로 정렬 시, 인덱스의 순서를 알려준다.
> x[order(x)]
[1] 2.1 3.3 4.2 5.4
x를 오름차순으로 정렬 시, 인덱스의 순서대로 정렬을 해준다.
> x[c(1,1)]
[1] 2.1 2.1
같은 인덱스를 참고할 수 있다.
> x[c(2.1, 2.9)]
[1] 4.2 4.2
소수점 인덱스를 참고하면 내림을 하고 정수 인덱스의 값을 반환한다.
> x[-c(3,1)]
[1] 4.2 5.4
-c(3,1)은 c(-3,-1)과 같고 3번 인덱스 값, 1번 인덱스 값을 제외한 나머지 값을 나타낸다.
> x[c(-1,2)]
Error in x[c(-1, 2)] : only 0's may be mixed with negative subscripts
하나만 음수로는 나타낼 수 없다.(즉, 제외하고 나타내고는 불가능)
> x[c(T,T,F,F)]
[1] 2.1 4.2
논리연산으로 가능하다. 참인 것들만 나타내준다.
> x[x > 3]
[1] 4.2 3.3 5.4
x 벡터에서 3보다 큰 값들을 나타내준다.
> x[c(T,F)]
[1] 2.1 3.3
x[c(T,F)]는 x[c(T,F,T,F)]와 같다. 즉, x벡터의 마지막까지 반복해준다.
> x[]
[1] 2.1 4.2 3.3 5.4
x 벡터를 나타내준다.
> x[0]
numeric(0)
x벡터의 0번째는 그냥 타입정도를 알려주고 값은 존재하지 않는다.
> y <- setNames(x, letters[1:4])
> y
a b c d
2.1 4.2 3.3 5.4
y에 x의 값을 순차적으로 대입해주는데 letters를 통해 name을 붙여 줄 수 있다.
> y[c("d","c","a")]
d c a
5.4 3.3 2.1
y 벡터에 있는 d,c,a 네임에 해당하는 값을 가져온다.
> y[c("a","a","a")]
a a a
2.1 2.1 2.1
같은 내용을 가져올 수 있다.
> z
abc def
1 2
z 벡터는 현재 abc, def 네임을 가짐을 알 수 있다.
> z <- c(abc = 1, def = 2)
> z[c("a","d")]
<NA> <NA>
NA NA
인덱스에 존재하지 않는 값은 NA 로 출력된다.
Lists
list는 서로다른 Type인 Elements들이 들어갈 수 있다.
물론 list내에 list도 포함 가능하다.
> x <- list(1:3, "a", c(T,F,T), c(2.3, 5.9))
> str(x)
List of 4
$ : int [1:3] 1 2 3
$ : chr "a"
$ : logi [1:3] TRUE FALSE TRUE
$ : num [1:2] 2.3 5.9
> x
[[1]]
[1] 1 2 3
[[2]]
[1] "a"
[[3]]
[1] TRUE FALSE TRUE
[[4]]
[1] 2.3 5.9
이때 리스트 인덱싱 방법은 [[]]와 []가 있는데
[]는 리스트로 감싸진 결과를 알려주고
[[]]는 리스트를 뺀 벡터값을 돌려준다.
> x[1]
[[1]]
[1] 1 2 3
> x[[1]]
[1] 1 2 3
> x[[1]][2]
[1] 2
x에 리스트를 넣는데 리스트 내에 또 리스트를 감싸서 인덱싱을 해보자.
> x <- list(list(1,2), c(3,4))
> x[[1]]
[[1]]
[1] 1
[[2]]
[1] 2
> x[[1]][[1]]
[1] 1
> x[[1]][[2]]
[1] 2
> x[[2]][1]
[1] 3
> x[[2]][2]
[1] 4
x의 1번 인덱스에는 list(1,2)가 있으니 [[1]]을 해주면 list(1,2)가 나올 것이다.
이때 값 2를 추출하기 위해서는 x[[1]]의 [[2]]를 꺼내주면 된다.
Attribute
attribute는 메타데이터를 설정 할 수 있게 해준다.
이때 생성은 attr(변수명, 메타데이터명) <- "메타데이터 내용"
조회는 attribute(변수명)으로 한다.
> x <- 1:10
> attr(x, "attrname") <- "this is attr"
> x
[1] 1 2 3 4 5 6 7 8 9 10
attr(,"attrname")
[1] "this is attr"
> attr(x, "attrname2") <- "this is attr2"
> attributes(x)
$attrname
[1] "this is attr"
$attrname2
[1] "this is attr2"
다음과 같은 코드도 한번 써보고 어떤 차이가 있는지 느껴보자.
> f <- factor(letters)
> levels(f) <- rev(levels(f))
> f
[1] z y x w v u t s r q p o n m l k j i h g f e d c b a
Levels: z y x w v u t s r q p o n m l k j i h g f e d c b a
> f2 <- rev(factor(letters))
> f2
[1] z y x w v u t s r q p o n m l k j i h g f e d c b a
Levels: a b c d e f g h i j k l m n o p q r s t u v w x y z
> f3 <- factor(letters, levels = rev(letters))
> f3
[1] a b c d e f g h i j k l m n o p q r s t u v w x y z
Levels: z y x w v u t s r q p o n m l k j i h g f e d c b a
이름을 지어주는 방법
첫번째로 아래와 같이 벡터 형성 시 이름을 지을 수 있거나
> x <- c(a = 1, b= 2, c= 3)
> x
a b c
1 2 3
두번째로 names를 통해 이름을 지을 수 있다.
> x <- 1:3
> names(x) <- c("a","b","c")
> x
a b c
1 2 3
세번째로 setNames를 통해 이름을 지을 수 있다.
> x <- setNames(1:3, c("a","b","c"))
> x
a b c
1 2 3
> unname(x)
[1] 1 2 3
> x <- setNames(1:3, c("a","b","c"))
> names(x) <- NULL
> x
[1] 1 2 3
'Basic > R' 카테고리의 다른 글
R언어 조건문, 반복문, 함수 (0) | 2018.05.13 |
---|---|
R언어 Matrix, Array, Data frame (0) | 2018.04.05 |
R언어 list, attr, names, dim, factor, table (2) | 2018.03.23 |
R언어 난수 생성, 정렬, 인덱싱, 벡터 연산 (0) | 2018.03.13 |
R언어 변수 조회, 제거, 파일 쓰기, 데이터 관찰 (0) | 2018.03.13 |