R언어 기본 문법 정리 - 내가 필요한거 위주 (주기적으로 수정)
사실 언어는 해당 언어의 문법만 알면 다른 언어를 다뤄본 사람들은 금방 다룰 수 있을거라 생각하고 있었기 때문에 굳이 R 문법을 공부할 필요가 없을거라고 생각하고 살았다. 그런데 한번 보는거랑 안보는건 엄청난 차이가 있을 것 같고 이 언어에서 지원하는 내장 함수들이 다른 언어와 다를 수 있을거라고 생각해서 이렇게 정리를 해놓으면 되게 도움이 될거라고 생각한다 (나한테만)
너무너무 당연한 것들은 따로 적기 귀찮아서 …ㅎㅎ .. 성의 없는 글 주의
R언어 표현식
R언어는 객체를 선언할 때 파이썬에서 처럼 별개의 자료형을 선언할 필요가 없다.
x<-c(“HELLO WORLD!”) mode(x)
여기서 보면 알 수 있듯 변수 x 에 charater 형 문자열 “HELLO WORLD” 를 ‘<-‘ 기호를 통해 할당하고 mode(x) 를 통해 x의 자료형을 알아본 결과 character 형인걸 알 수 있다.
즉 자료형을 선언해 주지 않아도 동적으로 자료형이 할당된다.
참고로 위의 예제에서 보면 문자열을 c() 로 묶어주는 것을 볼 수 있다. 즉 문자열은 c() 안에 넣어줘야 한다는 말 !
리스트
R의 리스트는 다른 언어와 다른점은 인덱스가 1부터 시작한다는 점이다.
리스트 할당
list <- list(c(“Hello World”),TRUE,0)
조금 신기했던 건 변수이름을 list 라는 R언어의 내장함수 이름을 사용할 수 있었다는 점이다. ( 물론 이렇게 실제로 하면 안좋다 &^^ …. )
쨋든 이 R의 list 역시 동일한 자료형만 저장하는 게 아닌 여러 자료형을 한번에 저장할 수 있었다는 사실 !!
리스트 요소 변경
list <- list(c(“Hello World”),TRUE,0) (list[1] <- 40)
위에서 list 라는 변수에 할당한 첫번 째 인덱스 “Hello World” 를 int 형 정수 40으로 대체하였다.
원래 있던 자리가 문자열이 있던 자리라도 자료형 상관없이 대체할 수 있다.
- 어떠한 정수 표현식도 인덱스로 사용할 수 있다.
- 존재하지 않는 요소를 읽거나 쓰려고 하면, 일종의 인덱스 오류 (IndexError)로 NULL이 반환된다.
- 인덱스가 음의 값이면, 해당 리스트 원소가 누락된다.
리스트 요소 확인
40 %in% list
%in% 이라는 명령어를 통해 해당 리스트에 요소가 들어있는지 확인할 수 있다. TRUE/FALSE 값으로 반환된다.
리스트 요소 삭제
- NULL 대입
t <- list(a=’a’, b=’b’, c = ‘c’) t[[ “c” ]] <- NULL
문자열 “c” 를 가진 인덱스에 NULL 대입하여 삭제
- 슬라이스 인덱스 사용 하나 이상의 요소를 제거하기 위해 사용된다.
t <- list(‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’) t[-c(2:5)]
‘b’ 부터 ‘e’ 까지 요소를 삭제 한다는 의미
리스트 출력
for (i in list){ print(i) }
for-each 문을 이용하여 요소들을 모두 출력할 수 있다.
하지만 리스트의 요소를 갱신하거나 쓰는 경우에는 인덱스 번호가 필요한 경우가 있다. 이럴 때는 seq_along() 함수를 사용한다
numbers <- list(1, 2, 3, 4, 5) for(i in seq_along(numbers)){ cat(“before:”, numbers[[i]], “\n”) numbers[[i]] <- numbers[[i]] * 2 cat(“after:”, numbers[[i]], “\n”) }
결과
before: 1 after: 2 before: 2 after: 4 before: 3 after: 6 before: 4 after: 8 before: 5 after: 10
제어문 (조건문반복문,분기문)
조건문 (if,switch)
생략 * ^^ ..*
반복문 (while,for,repeat)
while , for 사용법은 다른 언어와 동일한데 repeat 이라는 반복문이 존재함.
이 repeat 은 정확히 어떻게 사용해야하는 반복문인지 모르겠는데, while(true) 나 for( ; ; ) 와 같이 무한반복이나 조건이 애매할(?)때 또는 조건을 설정하기 애매할때 사용하는 듯 하다.
분기문 (break,next)
- break 반복문 실행 도중 해당 반복문을 탈출할 때 사용. 주로 조건문과 함께 사용된다.
- next 현재 반복을 중단하고 실행 위치를 다음 반복문으로 이동시킬 때 사용된다.
함수
함수 생성
함수명 <- function(인수){함수 내용}
인수가 없는 경우에는 function() 괄호를 비우면 되고 있으면 인수 넣어주면 된다 다 똑같으니까 생략 ㅠ ㅠ
return 할때도 그냥 “ return 리턴해주고 싶은 값 “ 이렇게 해주면 되는듯 딱히 리턴할 자료형은 명시하지 않아도 된다.
함수 생성하는 법이 꽤 많은듯 하다 https://dic1224.blog.me/80207294033 이 블로그 참조하면 좋을듯 !
함수 호출
호출에 대해 알아보던 중 그냥 함수 호출할 때 다른 언어와 똑같이 이름으로 호출하면 되는데 call()이라는 내장함수를 발견했다.
call() : 함수를 호출하여 call 객체를 만든다. 라고 나와 있는데 이걸 언제 쓰는지 call 객체가 무엇이며 이건 언제 사용되는지를 잘 모르겠다.
아는사람 인스타 dm 부탁드려요 .. ^^ㅠ