R 제어문, 연산, 함수
-
특징
-
결측치를 잘 다뤄야한다는 점
-
벡터연산을 수행한다는 점
-
제어문
-
if문
-
if (조건=참) {수행문} else {수행문}
-
for문
-
for (조건) {수행문}
-
while문
-
while (조건=TRUE){수행문}
-
NA 처리
-
R의 많은 함수는 이 문제를 해결하기 위해 -> NA를 제거하는 함수를 개발
-
ex) sum(c(1,2,3,NA),na.rm=T)
-
caret: Classification and Regression Training
-
na.omit
-
NA가 있는 행을 누락시킴
-
na.pass
-
NA의 포함 여부를 상관하지 않고 지나치고 계산
-
na.fail
-
NA가 있으면 실패라는 에러 문장을 보여줌
-
함수 작성
-
function_name <- function(입력값1, 입력값2,...) {수행문}
-
주의!!! -> 반환값 앞에 return을 붙여줘야함
-
함수는 인자의 위치를 사용해서 입력값을 넣던가 or 함수의 인자 이름을 지정해서 입력값을넣는 두가지 방법이 있다.
-
function(1,2) or function(x=1,y=2)
-
함수를 작성할 때 간혹, function1 <- function(z,...)에서 보듯이 ...을 발견
-
다른 함수로 인자를 넘겨줄 때 사용
-
ex) function1 <- function(z,...) { function2(...)}
-
nested function
-
중첩함수: 함수 안에 함수를 정의하여 사용하는 것
-
scope
-
코드에서 사용한 변수를 어디에서 사용 가능한지 정하는 것을 scope라고 한다.
-
console에서 변수를 설정하면 어디에서나 사용 가능한 변수로 설정
-
함수 안에 변수가 설정되면 함수 내에서만 적용, 우선권 -> 함수
-
함수내부의 변수는 밖에 정의되어 있으면 사용가능하나 밖에서는 함수 안의 변수를 찾지 못한다.
-
중첩함수도 이와같은 규칙이 적용된다.
-
만약 중첩함수 내부의 함수의 변수뿐만 아니라 외부의 변수도 변형시키고 싶다면 <<-를 사용
-
nested function에서도 내부함수에서 변수가 없다면 외부함수에서 찾는다. 하지만 그것도 없다면 전역변수를 찾는다.
-
벡터연산
-
벡터연산을 기본으로 한다.
-
x <- c(1,2,3,4,5)
-
ex) x+x, x==x, etc.
-
ifelse와같은 함수도 가능 -> ifelse(x%%2==0,’even’,’odd’)
-
ifelse(조건, 참일 때 수행, 거짓일 때 수행)
-
data.frame을 다룰때 벡터로 행을 선택가능
-
x <- data.frame(a =1:3, b=3:6)
-
ex) x[x$a%%2==0,] -> a행을 2로 나눴을 때 0인 경우와 모든 열 indexing
-
객체
-
R은 모든 데이터들이 객체이다.
-
객체는 불변 -> 데이터 수정이 불가
-
예를들면, 데이터프레임의 구조를 바꾸는 함수에 데이터프레임을 넣어도 하나의 객체로 인식된 데이터프레임이 바뀌지 않고 함수 안에서 복사본을 사용한다. 만약 복사본이 아닌 직접 객체를 사용하고 싶을 때는 return을 사용해야한다.
-
문제점: 매번 복사하면 많은 메모리 사용
-
해결: copy on write기법을 사용: 복사해야할 순간이 오면 복사함
-
큐
'R > 기초' 카테고리의 다른 글
R 새로운 종류의 Plot (0) | 2019.08.13 |
---|---|
R 데이터 plot 함수 (0) | 2019.08.13 |
R 데이터 조작 II (0) | 2019.08.13 |
R 데이터 조작 I (0) | 2019.08.12 |
R에서 사용하는 변수 (0) | 2019.08.12 |