if statementについて

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"

while loopについて

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だとゼロ、割り切れるので。

For

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.