lab01
#조건문 확인
jobtype <- "B"
jobtype
# if문은 ()값이 참일때 블럭 실행함.
# else구문, else if구문은 반드시 if 구문의 }의 같은 라인에 적어줘야함.
if(jobtype == 'A'){
bonus <- 200
}else {
bonus <- 100
}
print(bonus)
rm(jobtype)
rm(bonus)
# 점수를 가지고 학점을 주기
score <- 60;
# if-else if-else 구문
# else구문 옆에는 조건식이 오면 안된다는 것 기억.
if(score > 90){
grade <- 'A'
}else if(score > 80){
grade <- 'B'
}else if(score > 70){
grade <- 'C'
}else if(score > 60){
grade <- 'D'
}else{
grade <- 'F'
}
print(grade)
# 조건문에 논리연산자(&,|) 사용해보기.
a = 10
b = 20
# & 둘다 참이면 참을 리턴함.
if(a>5 & b>5){
print(a+b)
}
# | 하나라도 참이면 참을 리턴함.
if(a>5 | b>30){
print(a*b)
}
if(a>b){
c <- a
}else{
c <- b
}
print(c)
#첫번째 매개변수(수식)가 참이면 a를 리턴, 거짓이면 b를 리턴
c <- ifelse(a>b,a,b)
c
lab02
# 반복문에 대해 알아보자.
# for문
# for(변수 in 범위)
for (i in 1:5) {
print("*")
}
for(i in 1:10){
print(i)
}
# cat() : 문장을 만들어서 출력하고자 할때 사용하는 함수.
#\n은 개행하라(이스케이프문자)
for (i in 1:9) {
cat(" 2 *",1 , "=", 2*i, "\n")
}
c <- 20
cat("c의 값은",c,"\n")
for (i in 1:20) {
if((i %% 2) == 0){
cat("1~20까지의 짝수 : ",i,"\n")
}
}
for (i in 1:20) {
if((i %% 2) != 0){
cat("1~20까지의 홀수 : ",i,"\n")
}
}
#값 누적하기
sum <- 0
for (i in 1:1000) {
sum <- sum + i
}
cat("1에서 100 누적값 :",sum)
iris
head(iris,6)
#num은 150이 저장
num <- nrow(iris)
mylabel <- c()
mylabel
for (i in 1:num) {
# 꽃잎의 길이에 따라 레이블 결정
if(iris$Petal.Length[i] <= 1.6){
mylabel[i] <- 'L'
}else if(iris$Petal.Length[i] <= 5.1){
mylabel[i] <- 'H'
}else{
mylabel[i] <- "M"
}
}
mylabel
#새로운 데이터프레임을 만들자
df_new_iris <-data.frame(iris$Petal.Length,mylabel)
df_new_iris
class(df_new_iris)
head(df_new_iris)
# while문 (통상 무한루프를 실행할때 많이 사용함)
sum <- 0;
i <- 1;
while(i<=100){
sum <- sum + i #값 누적하기기
i <- i + 1 #이라인이 주석처리되면 무한루프에 빠진다.
}
print(sum)
# next문은 자신의 뒷문장은 실행하지 않고 반복문의 블럭끝으로 바로 이동함
# 1~10 사이의 홀수만 더한 결과
sum <- 0
for (i in 1:10) {
if(i%%2 == 0){
next
}
sum <- sum + i
}
print(sum)
# 1~10 사이의 짝수만 더한 결과
sum <- 0
for (i in 1:10) {
if(i%%2 != 0){
next
}
sum <- sum + i
}
print(sum)
lab03
# apply() -- 행과열이 있는 2차원 데이터인 메트릭스나 데이터 프레임에 이용함. 반복문에 비해서 속도도 빠르고 사용하기 편리하게 자주 이용함
iris
dim(iris)
# 1 <-----row(행)방향으로 함수를 적용함함.
apply(iris[,1:4],1,sum)
apply(iris[,1:4],1,mean)
# 2 <-----col(열)방향으로 함수를 적용함.
apply(iris[,1:4],2,sum)
apply(iris[,1:4],2,mean)
# 사용자 정의함수에 대해서 알아보기
# mymax 함수는 두개의 매개별수를 받아서 큰값을 리턴하는 함수
mymax <- function(x,y){
if(x>y){
max <- x
}else{
max <- y
}
return(max)
}
mymax(10,5)
a <- mymax(50,20)
b <- mymax(50,200)
print(a+b)
# 함수를 정의함에 있어 매개변수 일부의 값으로 초기값을 설정해 봄
mydiv <- function(x,y=2){
result <- x/y
return(result)
}
mydiv(10,3)
#매개변수가 1개 들어가므로 y값은 기본값을 이용
mydiv(10)
mydiv(100)
# 함수는 원래 하나의 기능을 하게끔 구현하는게 원칙
# R에서는 리턴값을 백터나 리스트형태로 해서 여러개 값을 넘길수 있음.
myfunc <- function(x,y){
vsum <- x+y
vmul <- x*y
return(list(sum=vsum, mul=vmul))
}
result <- myfunc(5,8)
class(result)
result$sum
result$mul
s <- result$sum
m <- result$mul
cat("5+8=",s,"\n")
cat("5*8=",m,"\n")
source("mylib.R")
c <- myadd(10,55)
cat("10 + 55 = ",c)
source("mylib.R")
c <- myminus(10,55)
cat("10 - 55 = ",c)
resours파일 mylib
myadd <- function(x,y){
return(x+y)
}
myminus <- function(x,y){
return(x-y)
}
lab04
# which함수 이해하기
# 학생들 성적을 백터로 만들기
score <- c(76,84,69,50,95,60,62,71,88,84)
#which 함수 사용안하고 특정 데이터를 삭제
length(score)
for (i in 1:length(score)) {
print(score[i])
}
#69점을 획득한 학생의 인덱스를 얻기위해서 반복문사용
for (i in 1:length(score)) {
if (score[i]==69) {
idx <- i
break;
}
print(score[i])
}
idx
# which()함수는 조건에 맞는 인덱스를 리턴함.
idx <- which(score==69)#69점의 인덱스를 리턴.
idx
# which()함수는 조건에 맞는 인덱스를 하나 혹은 여러개를 리턴함.
idx <- which(score>=85)
idx
class(idx)
# max()는 백터의 데이터 중 최고값을 리턴
max(score)
# which.max()는 최고값이 있는 인덱스를를 리턴
which.max(score)
min(score)
which.min(score)
idx <- which(score<=60)
idx
score[idx] <- 61 #수정을 한꺼번에 함.
score
idx <- which(score>=80)
idx
#80점 이상인 학생을 추출하여 또 다른 백터를 만듬
highscore <-score[idx]
highscore
idx <- which(iris$Petal.Length>5.0)
idx
length(idx)
# 꽃잎의 길이가 5.0을 초과하는 데이터를 추출함
irisbig <- iris[idx,]
irisbig
# 1~4 열에서의 값들 중에서 5.0을 초과된 값의 행과 열의 위치를 알고자 할때, 아래처럼 작성하면됨.
idx <- which(iris[,1:4]>5.0,arr.ind = TRUE)
idx
idx <- which(iris[,1:4]>10.0,arr.ind = TRUE)
idx
idx <- which(iris[,1:4]>1.0,arr.ind = TRUE)
idx
dim(idx)