1. R 프로그래밍 기초 #1
R의 설치 및 기본 데이타 형
2014.11.11 조대협 http://bcho.tistory.com
2. R 설치 및 환경
• BLAS( Basic Linear Algebra System)
– 리눅스에는 행렬과, 벡터의 내적과 선형 대수 연산을 수행하기 위한 라이브러리
– Reference implementation (구현체에 따라 성능 차이가 많이남)
• libblas
• ATLAS implementation (libatlas)
• OpenBLAS implementation (libopenblas)
• R Benchmark 를 이용하여 라이브러리 성능 측정
• R 개발 환경
– R Studio (vi 에디터, emacs 에디터 형 플러그인 有)
3. 패키지관리
• CRAN을 이용하여, 패키지 설치 가능
• R 스튜디오 “Packages”메뉴에서 관리 가능 (설치, 목록보기, 삭제등)
명령 예제 설명
install.package(“
패키지
명”,dependency)
install.package(“benchmark
”,TRUE);
dependency =
[NA|TRUE|FALSE]
TRUE이면, 의존성 있는 패키
지가 함께 설치됨
update.packages(
ask=TRUE);
현재 설치되어 있는 패키지중
에 업데이트가 있으면 설치한
다.
ask=FALSE이면, 물어보지
않고 모든 패키지를 최신 버전
으로 업데이트 한다.
library(“패키지
명”,help)
패키지를 로드하여 사용할 준
비를 한다. cf. Import
4. 변수 및 함수 인자 정의
• 변수
– 변수명
• 알파벳 또는 “.”으로 시작해야 한다.
• 알파벳,숫자, “_”, “.” 사용 가능
※ “-”는 사용 불가능함.
– 변수값 할당
• `=` 또는 <-, <<- 사용
• 함수 인자 정의
foo(a,b,c=3,d=4)
• foo(1,2) : a=1,b=2,c=3,d=4
• foo(1,2,99) : a=1,b=2,c=99,d=4
• foo(10,20,30,a=99) : a=99,b=10,c=20,d=30
5. 스칼라
• 단일 차원의 값 (1차원 값)
• NA : “데이타 값이 없음” 을 표현. is.na(x)로 체크 cf. NULL
• NULL : “변수가 초기화 되지 않음”
• 문자열 : char와 같은 단일 문자타입은 없음. 문자열을 ‘’또는 “”로 묶는다
• 진리값 : TRUE,FALSE로 표현
– &(AND),|(OR),!(NOT) 연산자 사용 가능 벡터의 요소별 연산
c(TRUE,TRUE) & c(TRUE,FALSE) = TRUE,FALSE
– &&, || (두개의 요소 연산)
6. 팩터
• 범주형 데이타 (cf. Enumeration)
– 명목형 (Nominal)
– 순서형 (Ordinal)
factor(“이름”,”값의 레벨”,순서여부 디폴트는 FALSE)
ex) sex<-factor(“m”,c(“male”,”female”)
명령 예제 설명
nlevel(x) nlevel(sex) 팩터의 레벨 개수
levels(x)
levels(sex)
levels(sex)<-c(“m”, “f”) 레벨값 변경
levels(sex)[1]
levels(sex)[2]
팩터의 레벨값을 리턴함
is.factor(x) is.factor(sex) 해당 변수가 팩터인지 리턴
ordered(“이름”, “값의레벨”)
> s <- ordered("a",c("a","b","c"))
> s [1] a
Levels: a < b < c
순서형 팩터 생성
is.ordered(x)
7. 벡터
• 일종의 배열의 개념으로 다음과 같은 특성이 있음
– 슬라이스 : 배열의 일부를 잘라낸 뒤, 이를 또 배열 처럼 사용 가능
– 셀에 이름 바구 가능
• 선언 : c(값1,값2,값3)
명령 예제 설명
c(“값1”,”값2”,…”); x<-c(1,2,3) 벡터 생성
names(x) c(“이름1”,”이름2”,…) names(x) <- c(“c1”, “c2”, “c3”); 각 셀에 이름을 지정함
names(x) names(x) 각 셀의 이름을 리턴함
x[n] x[2] N번째 요소를 리턴
x[-n] x[-2] N번째 요소를 제외하고 리턴
x[“셀이름”] x[“c1”] “셀이름”으로 지정된 벤터의 요소를 반환
x[start:end] x[1:3] 벡터의 start~end까지 요소을 반환
length(x) 벡터의 길이
nrow(x) 행렬에만 사용 가능
NROW(x) 벡터와 행렬 모두 사용 가능
※ 벡터의 요소는 1 부터 시작함 x[1]
※ 벡터는 열벡터를 사용함
열벡터 c : 한열로 m*1 행렬
행벡터 r: 한행으로 된 1*n 행렬
8. 벡터의 연산
명령 예제 설명
identical(x,y) - 두 벡터가 동일한지 비교
union(x,y)
> x
c1 c2 c3 c4 c5
1 2 3 4 5
> y
[1] -1 4 5 6
> union(x,y);
[1] 1 2 3 4 5 -1 6
합집합
x에만 있는 값이 먼저 들어가고, 그 다음 x,y에 공통적으로 있는 값, 그리
고 y에만 있는 값 순으로 합쳐짐
intersect(x,y) - 교집합
setdiff(x,y) - 차집합
setequal(x,y)
> a<-c(1,1,2,3);
> b<-c(1,2,3);
> identical(a,b); [1] FALSE
> setequal(a,b); [1] TRUE
벡터를 집합으로 (중복제거) 취급하여 비교
value %in%x > 1 %in% x [1] TRUE 벡터 x에 “value”가 저장되어 있는지 판단
x+n
> x
c1 c2 c3 c4 c5 1 2 3 4 5
> x+1
c1 c2 c3 c4 c5
벡터의 각 요소에 n을 더함
※ 마찬가지로 *,/,-,= 연산자 사용 가능
연속된 숫자로 구성된 벡터
seq(from,to,by)
> z<-seq(1,10,2)
> z
[1] 1 3 5 7 9
from~to까지 by씩 증가하는 벡터 생성
※ by는 생략하면 1
1씩 증가하는 경우 간단하게 x<-3:7 ,x<-7:3식으로 “seq”생략 가능
반복된 값을 저장한 벡터
rep(x,times,each)
> rep(1:2,times=5);
[1] 1 2 1 2 1 2 1 2 1 2
> rep(1:2,each=5)
[1] 1 1 1 1 1 2 2 2 2 2
> rep(1:2,each=5,times=2)
[1] 1 1 1 1 1 2 2 2 2 2 1 1 1 1 1 2 2 2 2 2
x 벡터를 times 횟수 만큼 반복. 반복시 each 횟수 만큼 개별 요소를 반복
9. 리스트
• 자바의 해시 테이블과 유사 (key,value)
x list(key=value,key=value…)
> x <-list(name='terry',age=100)
> x
$name
[1] "terry"
$age
[1] 100
> x['name']
$name
[1] "terry"
> x$age
$age
[1] 100
명령 예제 설명
x$key x$age > 100 리스트 x에서 key에 해당 하는 값
x[n] x[1] > $name,[1] “terry” 리스트 x에서 n번째 key,value 값
x[[n]] x[[1]] > [1] “terry” 리스트 x에서 n번째 value 값
• 리스트 안에, 리스트를 넣는 중첩형 리스트 지원
> c<-list(a=list(val=c(1,2,3)),b=list(val=c(1,2,3,4)));
> c
$a
$a$val
[1] 1 2 3
$b
$b$val
[1] 1 2 3 4
11. 행렬
• 행렬 함수
명령 예제 설명
A[i,j] 행렬 A의 i,j 원소
A[1:3,] 행렬 1~3열
A[-2,] 행렬에서 2열을 제외한값
A[,1:2] 행렬에서 1,2컬럼의 값
A+x 행렬의 모든 원소에 스칼라 x를 더한다
A+B 전치행렬
행렬 A와 B의 합
A %*% B 행렬 A와 B의 곱
t(A) 전치행렬 (transposed matrix) 퐴푇
solve(a,b) 행렬a*행렬x = 행렬 b에서, 행렬 x를 구한다. (다차 방정식을 풀때 사용)
solve(x) x의 역행렬 (역행렬 퐴*퐴−1 = 퐸 , 퐸는 단위 행렬)
dim(x) 행렬 x의 차원수
nrow(x) 행렬 x의 행수
ncol(x) 행렬 x의 열수
det(x) 행렬 x의 행렬식 (determinant)
12. 배열
• 행렬이 2차원 데이타라면, 배열은 다차원 데이타
array( 데이타, dim=length(data),dimnames=NULL)
• 데이타 : 배열의 데이타
• dim : 행렬의 차원, ex) dim=c(3,4) 3x4 배열 dim=c(2,2,3) 2x2x3 배열
※ 배열은 세로(열) 부터 채워짐
a = array(1:12,dim=c(3,4))
> a
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
명령 예제 설명
A[i,j] 배열의 i,j 원소
A[1:10,] 배열의 1:10 열
13. 데이타 프레임
• 데이타 프레임은 일종의 액셀의 스프레드시트와 같이 데이타를 정리하는 타입
• 각 컬럼의 ROW수가 같아야 함
data.frame(
컬럼명=데이타,
컬럼명=데이타
:
f <- data.frame( x=1:9, y=11:19)) ;
> f
x y
1 1 11
2 2 12
3 3 13
4 4 14
5 5 15
6 6 16
7 7 17
8 8 18
9 9 19
> f <- data.frame( x=1:9, y=11:30)
Error in data.frame(x = 1:9, y = 11:30) : arguments
imply differing number of rows: 9, 20
14. 데이타 프레임
명령 예제 설명
f$colname 데이타프레임 f에서 colname으로 된 컬럼의 데이타 리턴
f$colname<-y 데이타 프레임 f에서 colname으로 된 컬럼의 값을 y로 세팅
str(f) 데이타 프레임 f의 구조를 리턴
f[i,j,drop=false]
f[,c(“x”)] 컬럼명이 x인 컬럼만
f[,names(f) %in% c(“b”,”c”)] b,c 컬럼만 선택
f[,!names(f) %in% c(“a”)]
컬럼명이 a인것만 빼고
데이타 프레임 i열,j값
drop=FALSE이면, 데이타들만을 리턴
drop=TRUE이면, 데이타 프레임형 데이타 형으로 리턴
head(x,n=6L) head(x) 처음 6항만 리턴함 (디폴트가 6항) 데이타 프레임 x에서 처음 N항을 리턴
tail(x,n=6L) tail(x) 마지막 6항만을 리턴함 (디폴트가 6항) 데이타 프레임 x에서 마지막 N항을 리턴함
View(f)
※ 대소문자주의
데이타 프레임 f를 뷰 윈도우로 보여줌 (윈도우 창을 띄워줌)
(편집은 안되더라)
class(f[1:10,1])
[1] "integer"
> class(f[1:10,1,FALSE])
[1] "data.frame"
15. 타입 판별 및 변환
• 타입 판별
– class(x) : 객체 x 의 클래스 반환
– str(x) : 객체 x 내부의 데이타 구조
– is.factor(x),is.numeric(x),is.character(x) : 문자열인지 판단,is.matrix(x),is.array(x),is.data.frame(x)
• 타입 변환
– as.factor(x) : x를 factor형으로 변환
– as.numerix(x),as.character(x),as.matrix(x),as.array(x),as.data.frame(x)