if (condition1) {
expr1 } else if (condition2) {
expr2
} else if (condition3) {
expr3
} else {
expr4
}
if〜else if〜・・・elseのうち条件を満たしたら上位そのexprを実行する。以降は実行しない
if構文がforやwhileの中に複数ある場合は複数のifが実行される。
number<-10
if (number<5) {
result <- "extra small"
} else {
result <- "small"
}
print(result)
## [1] "small"
# 最初のifの()の中に変数だけいれてもよい。
number<-10 #numberを先に規定
if (number) { #numberの条件をここには書いてない。
if (number < 5) {
result <- "extra small"
} else {
result <- "small"
}
}
print(result)
## [1] "small"
複数のifを満たす場合は、一番最初に満たしたifを実行し、以後は行わない。
if〜elseの構文は2つのif〜elseが入っていても機能する。
# 複数のif〜elseが入っていてもよい。
number<-10
if (number) {
if (number < 5) {
result <- "extra small"
} else {
result <- "small"
} #ここまでが1つ
} else if (number < 100) {
result <- "medium"
} else {
result <- "large"
} #ここまでが2つ
print(result)
## [1] "small"
通常は1個目のif構文に該当するので、2個目は機能しない。
でもnumberが10未満という定義だと、“extra small”でも“small”でもなく、“medium”となる。
number<-10
if (number) {
if (number < 5) {
result <- "extra small"
} else {
result <- "small"
} #ここまでが1つ
} else if (number < 100) {
result <- "medium"
} else {
result <- "large"
} #ここまでが2つ
print(result)
## [1] "small"
ifと似ているけど、elseがなくて条件がTRUEになるまで続く。
speed <- 64
while (speed>30) {
print("Slow down!") #実行すること1
speed <- speed-7 #実行すること2
}
## [1] "Slow down!"
## [1] "Slow down!"
## [1] "Slow down!"
## [1] "Slow down!"
## [1] "Slow down!"
speed <- speed-7がないと延々に繰り返す。
延々に繰り返すのをやめる時はbreak commandを使う。
speed <-64
while (speed > 30) {
print(paste("Your speed is",speed))
if(speed>150){ #ここからの3行はbreakコマンド。今回は機能してないけど。
break #breakのほかにnextもある。nextは次に続く
}
if (speed>48) {
print("Slow down big time!")
speed <- speed-11
} else {
print("Slow down!")
speed <- speed-6
}
}
## [1] "Your speed is 64"
## [1] "Slow down big time!"
## [1] "Your speed is 53"
## [1] "Slow down big time!"
## [1] "Your speed is 42"
## [1] "Slow down!"
## [1] "Your speed is 36"
## [1] "Slow down!"
どうでもいいけど%%は整数商を表す。8 %% 4だとゼロ、割り切れるので。
ifと違って複数回実行を押すかんじ。whileと違ってループするわkでもない。
例えばTwitterというベクターをprintしたらそのまま印刷される。
twitter <- c(16, 9, 13, 5, 2, 17, 14)
print(twitter)
## [1] 16 9 13 5 2 17 14
Forを使用して1個ずつ印刷してみる。方法は2通り
for (p in twitter){
print(p)
}
## [1] 16
## [1] 9
## [1] 13
## [1] 5
## [1] 2
## [1] 17
## [1] 14
# もう一つ
for (i in 1:length(twitter)){
print(twitter[i]) #print[i]にしてしまうと1〜7を印刷。
#ちなみにforはリストをまるごと指定できるけど、その際は[[]]
}
## [1] 16
## [1] 9
## [1] 13
## [1] 5
## [1] 2
## [1] 17
## [1] 14
# 複数の文字列をあわせてprintしたかったらprint(pasete( ))
for (i in 1:length(twitter)){
print(paste("I had", twitter[i], "views on twitter"))
}
## [1] "I had 16 views on twitter"
## [1] "I had 9 views on twitter"
## [1] "I had 13 views on twitter"
## [1] "I had 5 views on twitter"
## [1] "I had 2 views on twitter"
## [1] "I had 17 views on twitter"
## [1] "I had 14 views on twitter"
Note that the echo = FALSE parameter was added to the code chunk to prevent printing of the R code that generated the plot.