# II. 함수(function) ----
## 1. 출력함수, print() & cat() ----
# 1) display의 차이
print("R programming")
# X : print("R","programming")
# 스칼라(data가 1개)값만 출력
cat("R","programming", "~~")
# 2) 자동개행
print("R");print("programming") # ok
cat("R");cat("programming");cat("~~") # not ok
# cat 자동개행
cat("R","\n","programming", "~~")
cat("R","\n","programming","\n","~~")
cat("R","programming", "~~",fill=1)
# 3) return 값 차이
print("R programming") |> length() # ok
cat("R","programming", "~~") |> length() # not ok
hong <- print("R programming");hong
hong2 <- cat("R","programming", "~~");hong2
## 2. 문자처리함수, paste() ----
h1 <- "hello";h1;length(h1)
h2 <- "R";h2;length(h2)
h3 <- "Programming~";h3;length(h3)
h4 <- c(h1,h2,h3);h4;length(h4) # 벡터
# 오류 : h1+h2+h3
paste(h1,h2,h3)
paste(h1,h2,h3) |> length()
paste(h1,h2,h3,collapse = "@")
#+ 이미 스칼라 data이기 때문에 collapse 반영안됨됨
paste(h4,collapse = " @ ")
paste(h4,collapse = " ^^ ")
paste(h4,collapse = "")
paste(h4,collapse = " ") # 벡터 => 스칼라
# 서수표기
c(1:12)
c(1:12) |> length()
c(1:12) |> class()
paste(1:12)
paste(1:12) |> length()
paste(1:12) |> class()
paste(1:12,c("st","nd","rd",rep("th",9)))
paste0(1:12,c("st","nd","rd",rep("th",9)))
## 3. 내장함수(built-in function) ----
# dts: https://sesoc.tistory.com/202, ss_exam.csv
getwd();rm(list=ls());rm(mx2);ls()
# dts import & 속성조회
#+ cdhlmnstrV
mx <- read.csv("dts/ss_exam.csv")
class(my_exam);class(mx)
class(mx$database)
dim(mx)
head(mx)
length(mx);length(mx$class)
# mode(mx)
# mode(mx$class)
names(mx)
str(mx)
summary(mx)
tail(mx,12)
rownames(mx)
View(mx)
# dts[]
# dts[숫자] => dts[index]
# dts[숫자, 숫자] => dts[행, 열]
# dts[조건식, 열] => dts[where, select] # *
# SQL>
# select 컬럼명1, 컬럼명2, 컬럼명3, ...
# from 테이블명(data.frame)
# where 조건식;
# mx
#+ index 방식(1개열일 경우)
mx[4] # 4번째 컬럼조회회(형식유지)
mx[4] |> class()
#+ 행,열 방식(1개열일 경우)
mx[2,] # 2행 전체 조회
mx[,2] # 2열 조회(형식X)
mx[2,] |> class() # 행개념의 접근은 형식유지(O)
mx[,2] |> class()
mx[3,5] # 3행, 5열
mx[3,5] |> class()
# index 방식: 3열과 5열
mx[c(3,5)]
mx[c(3,5)] |> class()
?c()
c(mx[3],mx[5]) |> class()
ant <- c(mx[3],mx[5])
View(ant)
# 3행과 5행 전부조회
mx[c(3,5),]
mx[c(3,5),] |> class()
# 컬럼명으로 조회
names(mx)
mx[c("database","eng")] |> tail(4)
mx[c("database","eng")] |> class()
## 4. 내장함수 조건부 조회(conditional selection)----
# 조별로 제출(조원명 기재): jwc@softsociety.net
# 1) 일본어 점수 >= 90 조회
# 2) 일본어 점수 >= 90이고, 영어 < 70 조회
# 3) 영어 >= 60인 id의 database와 java 조회
## 5. 외장 패키지 함수활용 ----
# 1) beepr
install.packages("beepr")
?beepr::beep()
beepr::beep(1)
beepr::beep(2)
beepr::beep(3)
beepr::beep(4)
beepr::beep(5)
beepr::beep(6)
beepr::beep(7)
beepr::beep(10)
beepr::beep(11)
# 2) sqldf
install.packages("sqldf")
# SQL (구조화된 질의어)
#+ DQL: 질의어 (5가지 대수학 언어) ***
#+ => select (.. join.. union... minus..)
#+ DDL: 데이터구조 정의어
#+ => create, alter, drop
#+ DML: 데이터 조작어
#+ => insert, update, delete
#+ DCL: 데이터 컨트롤 언어
#+ => grant, revoke
#+ TCL: 트랜잭션 컨트롤 언어 (all or nothing)
#+ => 트랜잭션 : 업무의 단위
#+ => commit, rollback
mp <- ggplot2::mpg
class(mp)
# SQL> create table mp as select * from mpg;
# selection
mp[,c(2,4)] |> head(3)
names(mp)
sqldf::sqldf("select model, year
from mp limit 3")
sqldf::sqldf("select model, year
from mp limit 3") |> names()
# 컬럼 2개를 붙이기: manufacturer, cty
sqldf::sqldf("select
manufacturer|| '=> ' ||cty
as 제조사_연비
from mp") |> head(10)
# 3) plot
names(mp)
# default plot()
plot(x=mp$cty)
plot(x=mp$hwy)
plot(x=mp$cty, mp$hwy)
# ggplot2::qplot()
search()
ggplot2::qplot(data=mp, x=cty)
ggplot2::qplot(data=mp, x=hwy)
ggplot2::qplot(data=mp, x=cty, y=hwy)
# ggplot2::qplot() + a
names(mp)
head(mp$drv)
ggplot2::qplot(data=mp, x=drv, y=hwy)
ggplot2::qplot(data=mp, x=drv, y=hwy, geom="boxplot")
ggplot2::qplot(data=mp, x=drv, y=hwy,
geom="boxplot", col=drv)
## 6. 사용자 정의 함수----
# 0) 평균과 합계를 구하는 함수
names(mx)
sum(mx$java)
sum(mx$java)/length(mx$java)
mean(mx$java)
# 1) 사용자함수 + print()
minseo <- function(a){
m_sum <- sum(a)
m_avg <- m_sum / length(a)
print(m_sum); print(m_avg)
}
ms <- minseo(mx$database)
ms
?print()
# 2) 사용자함수 + cat()
minseo2 <- function(a){
m_sum <- sum(a)
m_avg <- m_sum / length(a)
cat(m_sum);cat("\n");cat(m_avg)
}
ms2 <- minseo2(mx$database)
ms2
# 3) 사용자함수+ cat()+ return()
minseo3 <- function(a){
m_sum <- sum(a)
m_avg <- m_sum / length(a)
cat(paste0("합계: ", m_sum),
paste0("평균: ", round(m_avg,2)), fill=1)
return(list(ms_sum=m_sum, ms_avg=round(m_avg,2)))
}
ms3 <- minseo3(mx$database)
ms3
ms3$ms_sum
ms3$ms_avg
View(ms3)
## 7. 빈도 함수 ----
# 1) number data
num_bdata <- c(1,1,1,2,2,3,4,4,4,5,5)
class(num_bdata)
sum(num_bdata) # 32
# 빈도
table(num_bdata)
sum(table(num_bdata)) # 11
# 비율
prop.table(num_bdata) |> sum()
prop.table(num_bdata)
5/32 # 해당 변수의 크기 /전체합
prop.table(table(num_bdata))
2/11 # 숫자 5의 빈도합 / 총 빈도수
prop.table(table(num_bdata))*100
# plot
num_bdata
hist(num_bdata)
ggplot2::qplot(num_bdata)
table(num_bdata)
hist(table(num_bdata))
ggplot2::qplot(table(num_bdata))
# 2) character data
abc <- c("a","b","c")
c_bdata <- rep(abc, c(3,2,1))
class(c_bdata)
typeof(c_bdata)
table(c_bdata)
#-X sum(c_bdata)
table(c_bdata) |> sum()
table(c_bdata) |> prop.table()
table(c_bdata) |> prop.table() |> sum()
#-X prop.table(c_bdata)
# plot
#-X hist(c_bdata)
?hist()
table(c_bdata) |> hist()
ggplot2::qplot(c_bdata)
## 8. table() 옵션 ----
t1 <- c(NULL, "a","a", NULL, "b","c");t1
table(t1)
table(t1,useNA = 'no') # default 옵션
table(t1,useNA = 'ifany')
table(t1,useNA = 'always')
t2 <- c(NULL, "a","a", NULL, "b","c", NA, NA);t2
table(t2)
table(t2,useNA = 'no') # default 옵션
table(t2,useNA = 'ifany')
table(t2,useNA = 'always')
# plot
table(t1,useNA = 'ifany')|> ggplot2::qplot()
table(t2,useNA = 'ifany')|> ggplot2::qplot()
t1 |> ggplot2::qplot()
t2 |> ggplot2::qplot()
## 9. NULL/NA/NaN/INF ----
# NaN
log(1000)
log(-1000)
# Inf
# 연산가능: -10^308 ~ 10^308
10**2
10^2
10^10
-10^309
# NULL과 NA
n1 <- c(1:3,NULL, NULL)
n1;length(n1)
n2 <- c(1:3,NA, NA)
n2;length(n2)
# 연산
n1;n1+1;n1+NA;n1+NULL
n2;n2+1;n2+NA;n2+NULL
3+NA;3+NULL
# sum
sum(n1) # NULL 무시, 연산(o)
sum(n2) # NA 중요, 연산(x)
sum(n2, na.rm = T)
R Scripts : 3. 리스트 (List) (1) | 2023.10.06 |
---|---|
R Scripts : 1. 변수 (Variables) (1) | 2023.10.04 |
RF7_Test dataset sample (0) | 2023.09.15 |
댓글 영역