일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Google App Engine
- 파이썬
- SSM
- 고려대학교
- 빅데이터
- 신경회로망
- 하이퍼바이저
- 가상화
- hopfield network
- 인공지능
- 신경망
- 증강현실
- 삼성전자 소프트웨어멤버십 SSM
- 나르왈프레오
- 멤버십
- 갤럭시탭S8울트라
- 삼성소프트웨어멤버십
- Python
- 물걸레로봇청소기추천
- BAM
- 물걸레자동세척로봇청소기
- Neural Network
- 동아리
- 삼성
- Bidirectional Associative Memory
- Friendship
- 구글 앱 엔진
- 패턴인식
- NarwalFreo
- 패턴 인식
- Today
- Total
정보공간_1
[6기 신촌 김윤상] R 언어 #2 - Data Analysis에 최적화된 R 언어 알아보기 본문
[6기 신촌 김윤상] R 언어 #2 - Data Analysis에 최적화된 R 언어 알아보기
알 수 없는 사용자 2014. 9. 16. 18:52안녕하세요 신촌멤버십 23-1기 김윤상입니다.
지난 시간에 R 언어를 살펴보고 기본적인 사용법을 살펴보았습니다.
이번 시간엔 R 언어를 코딩하는 방법과 함수 작성을 살펴볼 예정입니다.
1. 분기문(논리 연산)
R 언어는 스크립트 언어이긴 하지만 프로그래밍 랭귀지의 성격 또한 띄고 있습니다.
R 에서의 TRUE는 1, FALSE는 0으로 변환되며
벡터로써의 논리 연산이 된다는 점을 유의하셔야 합니다
위 실행 결과를 보시면 백터로써의 연산으로 이루어져 있으며, TRUE 가 모여 다른 백터가 될 수도 있다는 것을 확인 가능합니다.
백터를 대상으로 loop문을 돌리지 않고 내부의 요소로 연산이 가능합니다.
ifelse 함수를 유의하여 봐 주시기 바랍니다.
ifelse문의 또다른 사용법은 Override(재정의) 입니다. 위와 같이 down 글자를 override 할 수 있습니다.
모두 백터 연산으로 이루어 집니다.
2. 반복문의 비효율성과 벡터 메모리 사용법
스크립트 언어는 가능한 한 반복문(Loop)를 사용하지 않고 코딩하는 것이 바람직합니다.
다음 예를 보겠습니다. rnorm() 함수는 0을 기준으로 한 정규분포 난수를 생성하는 함수입니다.
(100개의 난수를 생성한 예)
(1000개의 난수 생성 후 히스토그램으로 표현)
이제 100,000,000 개(1억 개)의 난수를 생성 후에 이 난수 중에 가장 큰 값을 찾는 법을 알아보겠습니다.
첫번째 코딩 방법은 max() 함수를 사용하여 벡터 연산을 하는 법입니다.
두번째 코딩 방법은 프로그래밍 언어와 같이 for 문 안에서 O(n)으로 검색하는 방법입니다.
결과는 위와 같습니다.
백터 함수인 max()는 0.25초 밖에 걸리지 않는 반면에, loop를 돌면 무려 50초가 걸리는 것을 확인할 수 있습니다.
이 결과로 loop를 사용하기 보다는 최대한 벡터 함수를 사용하여 결과를 처리해야 한다는 것을 볼 수 있습니다.
벡터 자료의 크기는 무한하나 할당하여 사용하는 것이 좋습니다. 다음의 세 코드를 비교하여 보겠습니다.
첫번째 코딩 방법은 x에 백터를 이용해 자료를 담는 방법입니다
두번째 코딩 방법은 y에 빈 벡터를 생성 후에 하나씩 할당을 늘려나가는 방법입니다
세번째 코딩 방법은 사이즈가 정해진 벡터 z를 생성 후에 메모리와 같이 사용하는 방법입니다.
두 번째 코딩 방법은 원소가 추가될 때마다 계속 재할당이 일어나 엄청나게 느린 속도를 보입니다.
결론적으로 첫번째처럼 벡터 자료형을 이용하여 자료를 바로 담거나,
loop문이 필요할 경우에는 사전에 벡터의 크기를 정해 놓아 재할당을 막는 방법을 사용하시는 것이 좋습니다.
3. 함수 작성
R에서 함수를 미리 스크립트에 담아놓고 필요할 때마다 사용할 수 있습니다.
함수는
함수 이름 = function(파라메터)
{
내용
}
과 같이 정의해서 사용할 수 있습니다.
양수를 세어 보는 함수를 작성해 봅시다
is_plus = function(a)
{
print( sum(a>0) )
}
a <- rnorm(10000)
is_plus(a)
와 같이 실행하면 a 중 양수인 것들의 합을 출력하게 됩니다.
정상적으로 출력 되는 것을 확인할 수 있습니다. 이와 같이 함수를 사용 가능합니다.
이제 R로 각종 논리 연산들을 활용할 수 있으며 함수를 작성하여 프로그래밍 하는 법을 알아보았습니다.
다음 시간에는 실제 여러 가지 데이터들을 가지고 직접 표시하는 예제를 살펴보기로 하겠습니다.
이상 삼성소프트웨어멤버십 23-1기 엘리트회원 김윤상이었습니다.
'IT 놀이터 > Elite Member Tech & Talk' 카테고리의 다른 글
[6기 강남 조유석] Union-Find (0) | 2014.09.21 |
---|---|
[6기 강북 이보희] 디지털 영상처리 - Filter 편 #1 (1) | 2014.09.18 |
[6기 신촌 류보원] 체감형 게임 - 오큘러스 리프트 연동 (0) | 2014.09.15 |
[6기 신촌 김상훈] 텍스트 마이닝 #1 (0) | 2014.09.15 |
[6기 강북 전영진] 리눅스 커널 심층 분석 #1 (0) | 2014.09.15 |