R-Project를 작업하면서 기록한 내용
Mar 8, 2017
R로 트래픽과 관련된 시뮬레이션 작업을 하면서 필요했던 부분에 대해 기록했다.
기본
사칙 연산
1+1 # 2
1-1 # 0
1*2 # 2
2/1 # 2
# 나머지
3%%2 # 1
NULL 체크
R에서는 is를 사용해서 타입을 체크할 수 있다.
foo = NA
bar = 'bar'
if(is.na(foo)) {
print('foo is null.')
}
if(!is.na(bar)) {
print('bar is not null.')
}
포맷에 맞춰서 출력하기
C에서 printf와 유사하게 R에서도 포맷에 맞춰 출력할 수 있다.
A = 'A'
B = 'B'
C = 'C'
print(
sprintf(
"OUTPUT : %s, %s, %s", A, B, C
)
)
[1] "OUTPUT : A, B, C"
변수 타입 알아내기
어떤 변수의 타입을 알아낼 때 필요한 함수들이다.
# class
class(mtcars)
[1] "data.frame"
# str
str(mtcars)
'data.frame': 32 obs. of 11 variables:
$ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
$ cyl : num 6 6 4 6 8 6 8 4 4 6 ...
$ disp: num 160 160 108 258 360 ...
$ hp : num 110 110 93 110 175 105 245 62 95 123 ...
$ drat: num 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
$ wt : num 2.62 2.88 2.32 3.21 3.44 ...
$ qsec: num 16.5 17 18.6 19.4 17 ...
$ vs : num 0 0 1 1 0 1 0 1 1 1 ...
$ am : num 1 1 1 0 0 0 0 0 0 0 ...
$ gear: num 4 4 4 3 3 3 3 4 4 4 ...
$ carb: num 4 4 1 1 2 1 4 2 2 4 ...
vector의 인덱스 구하는 방법
idx = match(key, temp_list$key)
반복(Loop)
# for 루프
for(mpg in mtcars$mpg) {
print(mpg)
}
# while 루프
i = 1
total = length(mtcars$mpg)
while(TRUE) {
if(total < i) {
break
}
print(mtcars$mpg[i])
i = i + 1
}
2개의 vector에서 교집합 구하기
a = c("A", "B", "C", "D", "E")
b = c("1", "2", "3", "4", "E")
intersect(a, b) # E
파일
현재 소스파일 경로 구하기
PHP의 __FILE__와 같이 소스 파일의 경로를 R에서도 구할 수 있다.
filepath = (function() {
return(attr(
body(
sys.function()
), "srcfile"
)$filename)
})()
print(filepath) # c:/temp/test.txt
# 디렉터리도 구할 수 있다.
dirname(file.path(filepath))
# 현재 작업 디렉터리
getwd() # "C:/Users/.../Documents"
데이터 객체를 텍스트 파일로 저장하기
# 단순 텍스트로 저장. 이어서 쓰기 가능
write.table(mtcars, "C:/temp/test.txt", append = TRUE)
# csv로 저장
write.csv(mtcars, "C:/temp/test.csv")
source 불러올 때 에러 해결
윈도에서 R 파일을 불러오는데 이런 에러가 발생했다. 소스에 한글이 있어서 발생했다.
> source("D:\\test.R")
경고메시지(들):
In grepl("\n", lines, fixed = TRUE) :
이 로케일에서는 입력문자열 17는 유효하지 않습니다
>
source 함수에서 encoding 옵션을 사용해서 해결했다.
source("D:\\test.R", encoding="utf-8")
성능
처리시간 출력하기
어떤 함수가 얼마나 걸리는지 알아볼 수 있다.
print(system.time(
main()
))
사용자 시스템 elapsed
1.15 0.00 1.15
차트
plot 차트 그리기
plot(mtcars$mpg,mtcars$threshold, type="l", col=cols[1], lty = "dashed",
xlab="seq", ylab="values", ylim=ylim,
main="threshold와 다른 변수들간의 상관관계",
sub=sprintf("최대 허용량 : %s, 초당 요청자수 : %s", MAX_CNT, REQUEST_CNT_PER_SEC),
panel.first = grid()
)