R Study
3.3 NA 의 처리 결측치가 데이터에 포함되어 있을 경우 연 산결과가 다음과 같이 NA 로 바뀌어버리므 로 주의가 필요 Ex) >NA&TRUE - [1]NA >NA+1- [1]NA >sum(c(1,2,3,NA)) – [1]NA
이러한 문제점을 해결하기 위해 많은 R 함 수들이 na.rm 인자를 받는다. Na.rm 은 NA 값이 있을 때 해당값을 제거할 것인지를 지정하기 위한 목적이다. Ex >sum(c(1,2,3,NA)) - [1]NA >sum(c(1,2,3,NA),na.rm=T) - [1] 셀렉트기호
NA 의 처리 - na.omit 은 NA 가 포함된 행을 제외 -na.pass 는 NA 의 포함여부를 상관하지 않 는다. -na.fail 은 NA 가 포함되어 있을 경우 에러를 보낸다 - 따라서 NA 를 어떻게 처리할지 na.action 으 로 받았다면 ‘na.action( 데이터프레임 )’ 을 실행하여 원하는 데이터로 정제할 수 있다.
4. 함수의 정의 함수명 <-function( 인자, 인자,…){ 함수본문 } R 에서 함수를 정의하는 방법은 다른언어의 함 수 정의와 유사하지만 몇가지 차이점이 있다. 1. 값 반환시 ‘return 반환값 ’ 의 형태가 아닌 return( 반환값 ) 의 형태 2. Return 이 생략되면 마지막 문장의 반환값이 함수의 반환값이 된다.
명확히 인자에 지정해주는 부분이 중요하다. >f(1,2) >f(y=1,x=2) 다음과 같이 함수 를 생성가능하다 function(z, …)
중첩함수 Function F function X Function Y
4.5 스코프 ( 전역변수 ) 코드에 기술한 변수 등을 지칭하는 이름이 어디에서 사용가능한지를 정하는 규칙을 스코프라 한다. 콘솔에서 변수를 선언하면 모든 곳에서 사 용가능한 변수가 된다.
>f() 로 값 출력 이후, n<-2 를 추가 후 >f() 로 값 다시 출력 콘솔에서 변수선언을 하면 모든곳에 서 사용가능한 변수가 된다. -> 전역변수의 개념 F<-function() Print(n) 값은 10 이 출력 전역변수에 선언 n<-10 F<-function(){ n<-20 Print(n) } 값은 20 이 출력 전역변수에 선언 n<-10
f<-function(x) a<-2 g<-function(y) print(y+a) g(x) 오류발생
스코프를 이용한 수식 잘된 수식 잘못된 수식
6. 벡터연산 - 벡터 데이터 타입을 지칭하기 보단 벡터와 리스트를 한번에 연산하는 것을 말함. - 벡터 연산이 중요한 이유는 for 문등을 사용 해 값을 하나씩 처리해가는 대신 벡터나 리 스트를 한번에 처리하는 것이 더 효율적이 고 편리하기 때문.
기본적인 벡터연산 벡터끼리의 연산 벡터에 대한 함수연산 벡터에 대한 제어연산
7. 값에 의한 전달 값 전달 실패 값은 df2 와 df 매개변수의 부족으로 인한 값 출력 실패
df 의 값에 1,2,3,4 를 넣었지만 function 을 통해 df 의 a 열 값을 1,2,3 을 집어 넣는다 df2 의 값에는 4,5,6 을 집어넣어 df 의 값에 f 의 df2 를 넣었을 경우 df 는 내부값인 df 의 전달이 강하므로 변하지 않는다.
8. 객체의 불변성 R 의 객체는 불변이다. 객체가 수정되는 방법은 객체가 바인딩된 이름에 새로운 할당이 되는 것 뿐이다. A<-c(1,2,3), a<-c(4,5,6)
오른쪽이 왼쪽보다 더 효율적이다. 객체가 불변 시 v 와 i 값을 할당해야 하므로 프로세스를 더 많이 잡아먹는 경향이 있어 속도가 느려진다.
9. 모듈패턴 모듈이란 외부에서 접근할 수 없는 데이터와 그 데이터를 제어하기 위한 함수로 구성된 구 조물을 말한다. 패턴이란 정형화된 코딩 기법을 뜻한다. 모듈의 사용자는 내부구조는 건드릴 수 없고 노출된 함수만 쓸 수 있으므로, 모듈 제작자는 해당 함수가 이전과 같은 결과만 내놓기만 한 다면 함수의 내부구조나 데이터 구조를 마음 대로 바꿀 수 있다.
9_1. 큐 FIFO(First In First Out) 줄선 순서대로 나간다. -Enqueue: 줄의 맨 뒤에 데이터를 추가 -Dequeue: 줄의 맨 앞에 있는 데이터를 갖 고옴 -Size: 줄의 길이, 즉 자료구조내에 저장된 데이터 수를 반환
1->3->51->31 Queue -> FIFO 입구출구 총 값은 3 개
9_2 큐 모듈의 작성 1->3->51->31 입구출구 이때, 전역변수로 선언을 해버릴 경우 데이터의 무결성이 훼손될 수 있다.
이러한 문제점을 막기위해 큐 코드 전체를 하나의 함수 로 감추어 모듈화 시킨다.
Queue() 함수 호출 시 만들어지는 queue 함 수 내부의 지역변수 q 와 q_size 가 생성되는 공간은 queue() 함수 호출때마다 매번 새로 생성된다. 즉 queue() 를 다음과 같이 여러 개 만들어 사용해도 섞이지 않게 된다.
Queue 모듈 A 라는 곳의 Queue 모듈 B 라는 곳의 Queue 모듈
Q&A?