Goals
R Data Types, Vector vs Scalar, c ( ), seq ( ), factor,
Nominal Factor, Ordinal Factor
연산자, matrix, 이름 지정, Array, Projection, dimnames
list, list 좌표 입력법
vector(벡터) : 한가지 타입의 값 여러개를 저장할 수 있는 1차원 배열
1차원 배열. 인덱스 한 개.
scalar(스칼라) : 한개의 값만 갖는 벡터.
> a<- c(1,2,10,20)
> a[1]
[1] 1
> b = seq(1,10,2)
> b[]
[1] 1 3 5 7 9
> c <- c("a", 1) # R에서는 유연성이 높은 타입으로 자동 타입 변환이 됨.
# 유연성: 문자> 숫자> 논리 타입
> d <- c(1, 2, T, F) # Number로 바뀌어 저장 ( T = True, F = False )
> e <- c('ONE', 1, T, F)
> e
[1] "ONE" "1" "TRUE" "FALSE"
# 벡터 생성
> subject_name <- c('korean', 'english', 'math')
# 벡터에서 특정 위치(인덱스)에 있는 원소 확인
> subject_name[1]
[1] "korean"
> subject_name[1:3]
[1] "korean" "english" "math"
> subject_name[c(1,3)]
[1] "korean" "math"
> subject_name[c(T,T,F)] # 1,2번 원소를 출력, 3번 원소는 출력x
[1] "korean" "english"
gender1 <- c('male', 'female', 'male') # factor가 아님. 단순한 문자열 벡터
gender2 <- factor(c('male','female','male')) # factor 타입 변수, 2개의 레벨을 갖는 펙터.
> gender2
[1] male female male
Levels: female male
symptoms<- factor(c('severe', 'mild', 'moderate'),
levels = c('mild', 'moderate', 'severe'),
ordered = T)
> symptoms
[1] severe mild moderate
Levels: mild < moderate < severe
> symptoms[1] # 팩터 - 인덱스 사용 가능
[1] severe
Levels: mild < moderate < severe
> symptoms>'moderate' # ordinal factor인 경우 크기비교가 가능
[1] TRUE FALSE FALSE
> gender2>'female' # nominal factor는 크기 비교가 불가능
[1] NA NA NA
Warning message:
In Ops.factor(gender2, "female") :
요인(factors)에 대하여 의미있는 ‘>’가 아닙니다.
연산자는(+,-,*,/,> ,< ,!=...) 들은 벡터의 각 원소에 하나씩 적용
> x <- c(1,2,3)
> x+1
[1] 2 3 4
>x==2
[1] FALSE TRUE FALSE
m1 = matrix(data= c(1:20), nrow = 5, ncol = 4)
m1 # 행의 개수만 지정해도, 저장할 데이터가 20개이므로, 컬럼의 개수는 자동으로 지정된다.
[,1] [,2] [,3] [,4]
[1,] 1 6 11 16
[2,] 2 7 12 17
[3,] 3 8 13 18
[4,] 4 9 14 19
[5,] 5 10 15 20
> m2<- matrix(data = c(1:20), nrow = 5, ncol = 4, byrow = T) # byrow 행부터 채운다. 기본값은 False
> m2
[,1] [,2] [,3] [,4]
[1,] 1 2 3 4
[2,] 5 6 7 8
[3,] 9 10 11 12
[4,] 13 14 15 16
[5,] 17 18 19 20
> m1[1,2]
[1] 6
> m1[1:5,2]
[1] 6 7 8 9 10
> m1[1,c(T,F,T,F)]
[1] 1 11
rnames <- c('Row1', "Row2")
cnames <- c('Col1','Col2', 'Col3')
m3 = matrix (data = c(1:6), nrow = 2, ncol = 3,
dimnames = list(rnames, cnames))
> m3
Col1 Col2 Col3
Row1 1 3 5
Row2 2 4 6
>m3[2,3]
[1] 6
>m3['Row2','Col3'] # 행/열의 이름이 있는 경우 인덱스 대신 이름 사용 가능
[1] 6
> 인덱스를 3개 이상 가짐.
> 같은 타입의 데이터들을 여러개 저장.
> a1<- array(data = c(1:24), dim = c(2,3,4))
> a1
, , 1
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
, , 2
[,1] [,2] [,3]
[1,] 7 9 11
[2,] 8 10 12
, , 3
[,1] [,2] [,3]
[1,] 13 15 17
[2,] 14 16 18
, , 4
[,1] [,2] [,3]
[1,] 19 21 23
[2,] 20 22 24
> a1[1, , ]
[,1] [,2] [,3] [,4]
[1,] 1 7 13 19
[2,] 3 9 15 21
[3,] 5 11 17 23
> a1[ ,1, ]
[,1] [,2] [,3] [,4]
[1,] 1 7 13 19
[2,] 2 8 14 20
> a1[ , ,1]
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
> a1[1, ,1]
[1] 1 3 5
> dname1 = c('x1','x2')
> dname2 = c('y1','y2','y3')
> dname3 = c('z1', 'z2', 'z3', 'z4')
> a2 <- array(data = c(1:24), dim = c(2,3,4),
+ dimnames = list(dname1, dname2, dname3))
> a2
, , z1
y1 y2 y3
x1 1 3 5
x2 2 4 6
, , z2
y1 y2 y3
x1 7 9 11
x2 8 10 12
, , z3
y1 y2 y3
x1 13 15 17
x2 14 16 18
, , z4
y1 y2 y3
x1 19 21 23
x2 20 22 24
>다른 타입의 값(벡터, Matrix, 데이터프레임 등)들을 여러개 저장할 수 있는 데이터 구조
> list1 <- list(name = c('홍길동', '허균'),
+ age = c(16, 55),
+ height = c(179.9, 150.5))
> list1
$name
[1] "홍길동" "허균"
$age
[1] 16 55
$height
[1] 179.9 150.5
> list1$name
[1] "홍길동" "허균"
> list1$name[1]
[1] "홍길동"
list2 <- list(x = c(1:3), # vector
y = matrix(c(1:4), nrow =2 , ncol = 2), # matrix
z = list1) # 리스트
> list2
$x
[1] 1 2 3
$y
[,1] [,2]
[1,] 1 3
[2,] 2 4
$z
$z$name
[1] "홍길동" "허균"
$z$age
[1] 16 55
$z$height
[1] 179.9 150.5
>> x = vector , y = table or matrix , z = list
> list2$x[3]
[1] 3
> list2$y[1,2]
[1] 3
> list2$z$name
[1] "홍길동" "허균"
#리스트의 각 원소(항목)은 인덱스로 접근할 수도 있음.
#리스트에서 인덱스를 사용할 때는 [ [ ] ] 더블 대괄호를 사용함.
> list2[[1]]
[1] 1 2 3
> list2[[2]][1]
[1] 1