R Programming
by mervyn
source
“K-MOOC 오세종 교수님의
Conditional if
if(logical expression){
statements
} else {
alternative statements
}
a<- 10
b<- 20
if(a>5 & b>5){ # and
print(a+b)
}
if(a>5 | b>30){ # or
print(a*b)
}
else { # else
print(a*10)
print(a/10)
}
ifelse (a>b, c<-a, c<-b) # (condition, true, false)
c
for
for(i in 1:10){ # iterate 1 to 10. i++
print(i) # print one value
cat("2*", i, "=", 2*i, "\n") # cat(): when print a string of values at one time.
}
for(i in 1:20){
if(i%%2==0){
print(i)
}
}
v1<- 101:200
for(i in 1:length(v1)){
if(v1[i]%%2==0){
print(v1[i]*2){
} else {
print(v1[i]+2)
}
}
sum<-0
for(i in 1:100){
sum<- sum+i
}
print(sum)
while
i<- 1
while(i<=10){
print(i)
i<- i+1
}
for vs. while
When the iteration number is predictable and set in advance; for
Where the iteration number or other things may change depending on calculation results; while
subset(iris, Sepal.Length >= 5.0 &
Sepal.Length <= 6.0)[, 1:2]
idx<- c()
for(i in 1:nrow(iris)){
if(iris[i, "Sepal.Length"] >= 5.0 &
iris[i, "Sepal.Length"] <= 6.0){
idx<- c(idx, i)
}
}
print(idx)
iris[idx, c("Sepal.Length", "Sepal.Width")]
variable initialization
ss<-0
for(i in 1:100){
ss<- ss+i
}
print(ss)
Assignment
-
Number and sum of multiple of 3 between 1~100
-
Program to print common multiple of 3 and 4 between 101~200
-
Program to print divisor of 24
-
Program to print 10!(factorial)
-
Print forty Fibonacci Sequence start from 0.
# 1
sum<-0
count<-0
for(i in 1:100){
if(i%%3==0){
count<- count+1
sum<- sum+i
}
}
print(count)
print(sum)
# 2
for(i in 101:200){
if(i%%12==0)
print(i)
}
# 3
for(i in 1:24){
if(24%%i==0){
print(i)
}
}
# 4
fact<- 1
for(i in 1:10){
fact<- fact*i
}
print(fact)
# 5
fib1<- 0
fib2<- 1
fib3<- 0
for(i in 0:39){
if(i==0){
print(fib1)
}
if(i==1){
print(fib2)
}
fib3<- fib1+fib2
fib1<- fib2
fib2<- fib3
print(fib3)
}
User Defined Function
sum(), min(), max()
mymax<- function(x,y){ # function(parameters1, parameter2)
num.max<- x
if(y>x){
num.max<-y
}
return(num.max) # return(function)
}
mymax(10,15)
mymax(20,15)
Specify Default Value
mydiv<- function(x, y=2){ # declare default value
result<- x/y
return(result)
}
mydiv(x=10, y=3) # y=2 is ignored
mydiv(10,3) # y=2 is ignored
mydiv(10) # y=2 same as mydiv(10, 2)
return list()
myfunc<- function(x, y){
val.sum<- x+y
val.mul<- x*y
return(list(sum=val.sum, mul=val.mul))
}
result<- myfunc(5,8)
result$sum
result$mul
When the parameters have no default values, input must be given.
Source function
setwd("c:/Rworks")
source("myfunc.R")
a<- mydiv(20, 4)
b<- mydiv(30, 4)
a+b
mydiv(mydiv(20, 2), 5)
Assignment
-
Program a function lgm() which returns Greatest Common Denominator (GCD) with two integer inputs.
-
Program a function maxmin() which returns max and min values of input vector by list.
# 1
# GCD algorithm using
# recursive function
lgm<- function(x,y){
if(y==0){
gcd<- x
}
else{
gcd<- lgm(y, x%%y)
}
return(gcd)
}
result<- lgm(10,8)
result
result<- lgm(10, 20)
result
# 2
maxmin<- function(v){
val.max<- v[1]
val.min<- v[1] # declare define values
for(i in 1:length(v)){
if(v[i]>v[1]){
v[1]<-v[i] # update value of v[1] to maximum/minimum value
# so we can compare to next v[i]
val.max<- v[1]
}
}
for(i in 1:length(v)){ # distinguish val.min operation from val.max
if(v[i]<v[1]){
v[1]<-v[i]
val.min<-v[1]
}
}
return(list(max=val.max, min=val.min))
}
v1<- c(7, 1, 2, 8, 9)
result<- maxmin(v1)
result$max ; result$min
result<- maxmin(iris[,1])
result$max; result$min
apply function
repetitive statement of matrix, data frame, list
for(i in 1:4){
mean(iris[,i])
}
apply(iris[,1:4], 2, mean) # column direction, mean
apply(iris[,1:4], 1, mean) # row direction, mean
lapply
lapply(iris[,1:4], mean) # column direction: without 2nd parameter
# mainly used for list
sapply: determine to show the result as a vector or list
sapply(iris[,1:4], mean) # vector
sapply(iris[,1:4], mean, simplify=F) # list
apply(iris[,1:4], 2, mean) # sapply(iris[,1:4], mean)
User Defined Function - sapply
myfunc<- function(x){
a<- max(x)
b<- min(x)
return(a-b)
}
sapply(iris[,1:4], myfunc)
Programming Example
Number matching game
n<- readline(prompt="Input number: ") # readline(): receive values from user
cat("Input number is", n, ". \n")
num<- round(runif(1)*100, digits=0) # runif(): generate a random value between 1 and 100
guess<- -1
cat("Guess a number between 0 and 100.\n")
while(guess !=num){ # continue if guess $$\neq$$ num
guess<- readline(prompt= "Guess number : ")
guess<- as.integer(guess)
# as.integer(): convert character format into number
if(guess==num){
cat("Congratulations,", num, "is right.\n")
} else if (guess < num){
cat("It's smaller!\n")
} else if (guess > num){
cat("It's bigger!\n")
}
}
Assignment
-
Input three number to a funciton as parameters. Return biggest number.
-
Receive 2 numbers from screen, print sum and multiplicaiton of two. (Repeat this until both numbers are 0)
# 1
biggy<- function(x, y, z){
max<- x
if(x<y | x<z){
if(y<z)
max<- z
else
max<- y
}
return(max)
}
result<- biggy(20, 100, 99)
result
# 2 #Error
a<- readline(prompt="Input: ")
a<- as.numeric(a)
b<- readline(prompt="Input: ")
b<- as.numeric(b)
while(a !=0 | b !=0){
sum<- a+b
mul<- a*b
cat("Sum: ", sum, "\n",
"Multiple: ", mul, "\n")
}
Tip
Print in file
sink("test.txt", append=T)
for(i in 1:100){
print(i)
}
sink()
append = T: add edition
tags: R
Comments
Post comment