R 기본 문법
2022. 10. 24. 12:37ㆍProgramming language/R
R의 데이터 타입
- 문자형 타입, character
- 숫자형 타입 , numeric(숫자), double(실수), integer(정수), complex(복소수)
- 논리형 타입, logical
- NaN, NA, NULL
> class(inf) # 무한대 -inf 음의 무한대
[1] "numeric"
> class(FALSE)
[1] "logical"
> sqrt(-3)
[1] NaN # 결과와 경고 반환
> class(NA) # 결측값
[1] "logical"
> class(NULL) # 존재하지 않는 값
[1] "NULL"
연산자
- 대입 :<-, <<-, =, ->, ->>
- 산술 : +, -, /, %%, ^ or **
- 관계 : ==, !=, >, >=, <, <=
- 논리 : &, |,!, xor()
no <- 7
no >= 2 + 2 * 2 | no < 5 %% 2
no >= 5 & no <= 10
no != 6
데이터 구조
DataFrame 행(옵저버) 열(변수,차원)
내장함수
# 객체 file i/o
x <- 1:5
y = 6:10
save(x, y, file='output/mydf.RData')
rm(list=ls()) #모두 지우기
load('output/mydf.RData') #x,y 다시 생김
# 함수
# 내장함수
seq(0, 5, by = 1.5)
set.seed(123)
rnorm(10, mean = 0, sd = 1) # 정규분포를 따르는 난수
hist(rnorn(5000, mean = 0, sd = 1))
runif(10, min=0, max=100)
hist(runif(5000, min=0, max=100))
sample(0:10, 5)
vec <- 1:10
min(vec) #최소값
range(vec) #범위
mean(vec)
median(vec) #중앙값
var(vec)
sqrt(var(vec))
sd(vec)
sd(vec) / mean(vec)
quantile(vec)
sum(vec)
prod(vec)
#...
# 사용자 정의 함수
func1 <- function(arg){
print(arg)
return(arg + 10)
}
typeof(func1) # 원시 자료형 (R 에서의) Closure: 함수 Complex: 복소수
# class() : R 객체지향 관점에서의 자료형 # mode() : 원시 자료형 (S1 에서의)
# 참고 https://statools.tistory.com/16
func1(5)
test <- read.csv('testdata/')
제어문
제어문 : 조건 판단문 - if, switch, which
# 1) if() 함수
x <- 10; y <- 5
if(x + y >= 10){
cat('결과는', x+y)
cat('\n참일 때 수행')
}else{
print('거짓일 때 수행')
a = 10 # 함수 안에서는 <-보다 =으로
}
# 2) ifelse(조건, 참, 거짓)
ifelse(x > 5, 'good', 'bad')
# mpg dataset을 사용
install.packages('ggplot2') #시각화에 좋음
library(ggplot2)
head(mpg, 3)
head(iris, 3)
mpg <- as.data.frame(ggplot2::mpg) # ggplot2:: 안써도 됨?
head(mpg, 3)
dim(mpg)
str(mpg)
summary(mpg) # 기술 통계 결과값?
# 새로운 칼럼(변수)를 추가 : 통합연비
mpg$total <- (mpg$cty + mpg$hwy) /2
head(mpg, 3)
if(mean(mpg$total) >= 20){
cat('우수연비')
}else{
cat('일반연비')
}
summary(mpg$total)
hist(mpg$total)
mpg$test <- ifelse(mpg$total >= 20, 'pass', 'fail') #칼럼 새로 만듬
head(mpg, 3)
tail(mpg, 3)
table(mpg$test)
mpg$grade <- ifelse(mpg$total >= 30,'A', ifelse(mpg$total >= 20, 'B', "C"))
head(mpg, 3)
qplot(mpg$grade)
# switch
switch("age", id="hong", age=23)
a <- 1
switch(a, mean(1:10), sd(1:10))
a <- 2
switch(a, mean(1:10), sd(1:10))
# which
name <- c("kor",'eng','mat','kor')
which(name=='eng') # index반환
no <- 10:13
df <- data.frame(번호=no, 이름=name)
df
which(df$번호==12)
which(df$이름=='kor') #조건 판단문
# 반복문 : for, while, repeat
# for
su <- 1:10
for(n in su){
cat(n)
}
for(num in 1:9){
res = 2 * num
cat(2, '*', num, '=', res, '\n')
}
for(n in su){
if(n %% 2 == 0){
next
}else{
print(n)
}
}
# while
i <- 0
while(i < 10){
i = i + 1
print(i)
}
i <- 0
while(TRUE){
i = i + 1
print(i)
if(n == 3) break
}
cat('반복문 수행 후 i : ', i)
# repeat
cnt <- 1
repeat{
print(cnt)
cnt = cnt + 2
if(cnt > 10) break
}
'Programming language > R' 카테고리의 다른 글
R db 연동 (0) | 2022.10.24 |
---|---|
R 설치 (0) | 2022.10.20 |