작성일자 : 2023-09-28
Ver 0.1.1
- Vector는 가장 기본적인 객체형이다.
- Vector는 하나 또는 그 이상의 원소로 구성되며 같은 vector에 속한 원소들은 모두 동일한 자료형을 갖는다.
Vector의 생성
c( 1 , 3 , 5 )
[1] 1 3 5
c( 1 , 0.1 , 0.02 )
[1] 1.00 0.10 0.02
c( 'A' , 'B' , 'C' )
[1] "A" "B" "C"
c( 2+4i , 3 , 1i )
[1] 2+4i 3+0i 0+1i
c( T , T , F )
[1] TRUE TRUE FALSE
c( a = 1 ,b = 2 ) # vector의 원소에 개별 이름을 붙임
a b
1 2
1:10
[1] 1 2 3 4 5 6 7 8 9 10
-5:4
[1] -5 -4 -3 -2 -1 0 1 2 3 4
4:-5
[1] 4 3 2 1 0 -1 -2 -3 -4 -5
1.5:5
[1] 1.5 2.5 3.5 4.5
0:pi
[1] 0 1 2 3
options( digits = 2 ) # 2 digits after period
-pi:pi
[1] -3.14 -2.14 -1.14 -0.14 0.86 1.86 2.86
options( digits = 7 )
- :는 왼쪽의 숫자로부터 1씩 증가하거나 감소하는 수열을 생성.
seq( from = 3 , to = 5 , by = 0.2 )
[1] 3.0 3.2 3.4 3.6 3.8 4.0 4.2 4.4 4.6 4.8 5.0
seq( from = 3 , to = 5 , length = 11 )
[1] 3.0 3.2 3.4 3.6 3.8 4.0 4.2 4.4 4.6 4.8 5.0
seq( from = 0 , to = 10 , by = 2 )
[1] 0 2 4 6 8 10
seq( 0 , 10 , 2 )
[1] 0 2 4 6 8 10
seq( 10 , 0 , 2 )
Error in seq.default(10, 0, 2): wrong sign in 'by' argument
seq( by = 2 , to = 10 , from = 0 )
[1] 0 2 4 6 8 10
seq( 0 , 10 , 1.7 )
[1] 0.0 1.7 3.4 5.1 6.8 8.5
seq( 10 , 0 , -1.7 )
[1] 10.0 8.3 6.6 4.9 3.2 1.5
seq( 5 )
[1] 1 2 3 4 5
rep( c( 'A' , 'B' , 'C' ) , 2 )
[1] "A" "B" "C" "A" "B" "C"
rep( 1:3 , c( 3 , 2 , 3 ) )
[1] 1 1 1 2 2 3 3 3
rep( c( 'A' , 'B' , 'C' ) , each = 2 )
[1] "A" "A" "B" "B" "C" "C"
data1 = scan() # try to type 2, 5, 7, NA, 4, 8, NA, 9
data1
scan( what = '' ) # try to type Hello World!
scan( what = complex() ) # try to type 3, 4, 5
scan() function
data2 = scan( file = 'files/file1.txt' )
data2
[1] 3 4 6 8 10 21 85 33
data3 = scan( file = 'files/file1.txt' , what = character() )
data3
[1] "3" "4" "6" "8" "10" "21" "85" "33"
Vector의 연산
R을 이용하여 다음을 계산하자.
sum( 1:10^2 ); sum( (1:10)^2 ) # 1.
[1] 5050
[1] 385
sum( cos( 1:20 ) * pi / 20 ); sum( cos( 1:20 * pi / 20 ) ) # 2.
[1] 0.08476152
[1] -1
재사용 규칙 (recycle rule)
c( 1 , 2 , 3 ) + rep( 3 , 3 )
[1] 4 5 6
c( 1 , 2 , 3 ) * rep( 3 , 3 )
[1] 3 6 9
c( 1 , 2 , 3 ) + 3
[1] 4 5 6
c( 1 , 2 , 3 ) * 3
[1] 3 6 9
1:6 + 1:3
[1] 2 4 6 5 7 9
1:6 + 1:5
Warning in 1:6 + 1:5: longer object length is not a multiple of shorter
object length
[1] 2 4 6 8 10 7
Vector의 특성(attribute)
- 모든 vector는 자료형(mode), 원소의 이름(names), 길이(length)의 특성을 갖는다.
age1 = c( 22 , 25 , 20 )
age1
[1] 22 25 20
names( age1 )
NULL
names( age1 ) = c( 'Kim' , 'Lee' , 'Park' )
age1
Kim Lee Park
22 25 20
names( age1 )
[1] "Kim" "Lee" "Park"
age2 = c( Kim = 22 , Lee = 25 , Park = 20 )
names( age2 )
[1] "Kim" "Lee" "Park"
mode( age1 )
[1] "numeric"
length( age1 )
## [1] 3
Vector의 원소 추출과 조작
data1 = ( 1:5 )^2
data1
[1] 1 4 9 16 25
data1[ 3 ] # 3번째 원소를 추출
[1] 9
data1[ -4 ] # 4번째 원소를 제거 후 출력
[1] 1 4 9 25
data1[ c( 1 , 2 , 4 ) ] # 1번째, 2번째, 4번째 원소를 추출
[1] 1 4 16
data1[ - c( 1 , 2 ) ] # 1번째, 2번째 원소를 제거
[1] 9 16 25
data1[ data1 > 5 ] # 5보다 큰 원소만 추출
[1] 9 16 25
data1 > 5
[1] FALSE FALSE TRUE TRUE TRUE
data1[ c( F , F , T , T , T ) ] # 3번째, 4번째, 5번째 원소를 추출
[1] 9 16 25
data1[ F ] # 재사용규칙에 의해 data1[ c( F , F , F , F , F ) ] 과 동일
numeric(0)
data1[ T ] # 재사용규칙에 의해 data1[ c( T , T , T , T , T ) ] 과 동일
[1] 1 4 9 16 25
data1[ c( T , F ) ] # 재사용규칙에 의해 data1[ c( T , F , T , F , T ) ] 과 동일
[1] 1 9 25
age2
Kim Lee Park
22 25 20
age2[ names( age2 ) == 'Lee' ]
Lee
25
data1 = data1 + 3
data1
[1] 4 7 12 19 28
data1[ 3 ] = 10
data1
[1] 4 7 10 19 28
data1 = c( data1 , 9 )
data1
[1] 4 7 10 19 28 9
data1 = c( 1 , data1 , data1 )
data1
[1] 1 4 7 10 19 28 9 4 7 10 19 28 9
Vector에 함수 적용하기
paste( 'page' , 1:10 )
[1] "page 1" "page 2" "page 3" "page 4" "page 5" "page 6" "page 7"
[8] "page 8" "page 9" "page 10"
month.name
[1] "January" "February" "March" "April" "May"
[6] "June" "July" "August" "September" "October"
[11] "November" "December"
month.abb
[1] "Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov"
[12] "Dec"
letters
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q"
[18] "r" "s" "t" "u" "v" "w" "x" "y" "z"
LETTERS
[1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q"
[18] "R" "S" "T" "U" "V" "W" "X" "Y" "Z"
month.kor = paste( 1:12 , "월" , sep = '' )
month.kor
[1] "1<U+C6D4>" "2<U+C6D4>" "3<U+C6D4>" "4<U+C6D4>" "5<U+C6D4>"
[6] "6<U+C6D4>" "7<U+C6D4>" "8<U+C6D4>" "9<U+C6D4>" "10<U+C6D4>"
[11] "11<U+C6D4>" "12<U+C6D4>"
data2 = c( 1 , 3 , 5 , NA , 7 , 8 , NA )
sum( data2 )
[1] NA
sum( data2 , na.rm = T ) # NA 제거후 합계산
[1] 24
data3 = rnorm( 7 ) # 표준정규분포에서 난수 7를 생성
data3
[1] 1.6122675 -1.3866324 0.5109233 0.3447084 0.1354443 0.4310004
[7] 0.5452029
round( data3 ) # 반올림
[1] 2 -1 1 0 0 0 1
round( data3 , digits = 2 ) # 소수점 2자리에서 반올림 표기
[1] 1.61 -1.39 0.51 0.34 0.14 0.43 0.55
round( data3 , digits = c( 2 , 3 ) )
[1] 1.610 -1.387 0.510 0.345 0.140 0.431 0.550
mean( data3 )
[1] 0.3132735
sd( data3 )
[1] 0.8866033
- 위의 예제에서 난수는 시행할 때 마다 다르게 생성됨에 유의.
Vector의 자료형 확인하기
( vec = 3:6 )
[1] 3 4 5 6
is.vector( vec )
[1] TRUE
is.numeric( vec )
[1] TRUE
is.integer( vec )
[1] TRUE
is.complex( vec )
[1] FALSE