Lecture6: 条件分岐

前回の補足

seq(0,10,by=2)
[1]  0  2  4  6  8 10
rep(1:4)
[1] 1 2 3 4
rep(1:4, each=2)
[1] 1 1 2 2 3 3 4 4
rep(1:4, times=2)
[1] 1 2 3 4 1 2 3 4
  • wordcloud2: shape
circle, cardioid, diamond, triangle-forward, triangle, pentagon, star
library(wordcloud2)
wordcloud2(freqData2, size = 0.8, shape = 'star')

条件分岐

条件文if & 分岐条件: 分類値

numType <- function(value, type=1){
  if(type==1){
      ans <- value ^ 2
  }else if(type==2){
      ans <- value ^ 0.5
  }
  return(ans)
}

実行例

numType(100)
[1] 10000
numType(100, type=2)
[1] 10

条件文if & 分岐条件: 真偽値

flagType <- function(value, flag=FALSE){
  if(flag==FALSE){
      ans <- value ^ 2
  }else if(flag==TRUE){
      ans <- value ^ 0.5
  }
  return(ans)
}

実行例

flagType(100)
[1] 10000
flagType(100, flag=TRUE)
[1] 10

条件文switch & 分岐条件: 分類値

switchType <- function(value, type="1"){
  ans <- switch (type,
    "1" = value ^ 2,
    "2" = value ^ 0.5
  )
  return(ans)
}

実行例

switchType(100, type="1")
[1] 10000

応用編

source("calc_ans.R")
fname <- "sample_texts/sample_en.txt"
words <-tolower(unlist(strsplit(readLines(fname),"[[:space:]]|[[:punct:]]")))
words<- words[words != ""]
typeof(fname)
[1] "character"
typeof(words)
[1] "character"

関数の作成

calcRTTR.new <- function(arg){
  print(length(arg))
  print(typeof(arg))
  if (typeof(arg) != "character") stop("unexpected input")
  if(length(arg)==1){
      res <- calcRTTR1(arg)
  }else if(length(arg)>=2){
      res <- calcRTTR2(arg)
  }
  return(res)
}

実行例1

calcRTTR.new(fname)
[1] 1
[1] "character"
[1] 6.527299

実行例2

calcRTTR.new(words)
[1] 71
[1] "character"
[1] 6.527299

実行例3

calcRTTR.new(1)
[1] 1
[1] "double"
Error in calcRTTR.new(1) : unexpected input

前回の実習

時間があれば…

指定ディレクトリのファイル一覧を取得(相対パス)

fLst<- list.files("sample_texts")
fLst
[1] "sample_ch.txt"   "sample_en.txt"   "sample_ja_1.txt" "sample_ja_2.txt"

Zipf’sの法則

\[Frequency=\frac{K}{Rank^A} \] K,A: 定数

テキストファイル”GSLC2021.txt”の単語頻度データを取得

freqData <- getFreq("GSLC2021.txt")
dim(freqData)
[1] 271   1
head(freqData)
K=freqData[1,1]
A=0.8

rank <- seq(1:dim(freqData)[1])
zipf <- K/rank^A

グラフ描画

凡例: legend

配置:“bottomright”, “bottom”, “bottomleft”, “left”, “topleft”, “top”, “topright”, “right”, “center”
ラベル
lty: 線の種類
pch: プロットの種類
#理論値
plot(zipf, log="xy", type="l",col="red" ,
xlim=c(1,nrow(freqData)),ylim=c(1,50),main="Zipf's Law", xlab="Rank", ylab="Frequency")

#頻度散布図の重ね書き
par(new=T)
plot(rank,freqData[,1], xlim=c(1,nrow(freqData)), ylim=c(1,50),log="xy",pch=8, col="darkgreen", main="Zipf's Law", xlab="Rank", ylab="Frequency")

#凡例
legend("topright",c("Frequency","Zipf's law"),lty=c(NA,1),pch=c(8,NA),col=c("darkgreen","red"))
plot(zipf, log="xy", type="l",col="red" ,
xlim=c(1,nrow(freqData)),ylim=c(1,50),main="Zipf's Law", xlab="Rank", ylab="Frequency")
par(new=T)
plot(rank,freqData[,1], xlim=c(1,nrow(freqData)), ylim=c(1,50),log="xy",pch=8, col="darkgreen", main="Zipf's Law", xlab="Rank", ylab="Frequency")
legend("topright",c("Frequency","Zipf's law"),lty=c(NA,1),pch=c(8,NA),col=c("darkgreen","red"))

LS0tCnRpdGxlOiAiTGVjMDY6IOadoeS7tuWIhuWykCIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKIyBMZWN0dXJlNjog5p2h5Lu25YiG5bKQCgojIyDliY3lm57jga7oo5zotrMKKiA8YSBocmVmPSJodHRwczovL3d3dy5yLWJsb2dnZXJzLmNvbS8yMDIxLzA2L3ItcGxvdC1wY2gtc3ltYm9scy1kaWZmZXJlbnQtcG9pbnQtc2hhcGVzLWluLXIvIiB0YXJnZXQ9Il9ibGFuayI+UGxvdCBwY2ggc3ltYm9sczwvYT4KCiogPGEgaHJlZj0iaHR0cDovL3JzdHVkaW8tcHVicy1zdGF0aWMuczMuYW1hem9uYXdzLmNvbS80NjM3NTZfZDRkODY4MTI4NzhiNDc2ZjliZGFlMmY1NTA0MmY1MGUuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPlRpcHMgb24gcGxvdHRpbmc8L2E+CgoqIDxhIGhyZWY9Imh0dHBzOi8vd3d3LnJkb2N1bWVudGF0aW9uLm9yZy9wYWNrYWdlcy9iYXNlL3ZlcnNpb25zLzMuNi4yL3RvcGljcy9zZXEiIHRhcmdldD0iX2JsYW5rIj5zZXHplqLmlbA8L2E+CgpgYGB7cn0Kc2VxKDAsMTAsYnk9MikKYGBgCiogPGEgaHJlZj0iaHR0cHM6Ly93d3cucmRvY3VtZW50YXRpb24ub3JnL3BhY2thZ2VzL2Jhc2UvdmVyc2lvbnMvMy42LjIvdG9waWNzL3JlcCIgdGFyZ2V0PSJfYmxhbmsiPnJlcOmWouaVsDwvYT4KYGBge3J9CnJlcCgxOjQpCnJlcCgxOjQsIGVhY2g9MikKcmVwKDE6NCwgdGltZXM9MikKYGBgCgoqIHdvcmRjbG91ZDI6IHNoYXBlCmBgYApjaXJjbGUsIGNhcmRpb2lkLCBkaWFtb25kLCB0cmlhbmdsZS1mb3J3YXJkLCB0cmlhbmdsZSwgcGVudGFnb24sIHN0YXIKYGBgCgpgYGB7cn0KbGlicmFyeSh3b3JkY2xvdWQyKQp3b3JkY2xvdWQyKGZyZXFEYXRhMiwgc2l6ZSA9IDAuOCwgc2hhcGUgPSAnc3RhcicpCmBgYAojIyDmnaHku7bliIblspAKIyMjIOadoeS7tuaWh2lmICYg5YiG5bKQ5p2h5Lu2OiDliIbpoZ7lgKQKYGBge3J9Cm51bVR5cGUgPC0gZnVuY3Rpb24odmFsdWUsIHR5cGU9MSl7CiAgaWYodHlwZT09MSl7CiAgICAgIGFucyA8LSB2YWx1ZSBeIDIKICB9ZWxzZSBpZih0eXBlPT0yKXsKICAgICAgYW5zIDwtIHZhbHVlIF4gMC41CiAgfQogIHJldHVybihhbnMpCn0KYGBgCgojIyDlrp/ooYzkvosKYGBge3J9Cm51bVR5cGUoMTAwKQpudW1UeXBlKDEwMCwgdHlwZT0yKQpgYGAKCiMjIOadoeS7tuaWh2lmICYg5YiG5bKQ5p2h5Lu2OiDnnJ/lgb3lgKQKYGBge3J9CmZsYWdUeXBlIDwtIGZ1bmN0aW9uKHZhbHVlLCBmbGFnPUZBTFNFKXsKICBpZihmbGFnPT1GQUxTRSl7CiAgICAgIGFucyA8LSB2YWx1ZSBeIDIKICB9ZWxzZSBpZihmbGFnPT1UUlVFKXsKICAgICAgYW5zIDwtIHZhbHVlIF4gMC41CiAgfQogIHJldHVybihhbnMpCn0KYGBgCgojIyDlrp/ooYzkvosKYGBge3J9CmZsYWdUeXBlKDEwMCkKZmxhZ1R5cGUoMTAwLCBmbGFnPVRSVUUpCmBgYAoKIyMjIOadoeS7tuaWh3N3aXRjaCAmIOWIhuWykOadoeS7tjog5YiG6aGe5YCkCmBgYHtyfQpzd2l0Y2hUeXBlIDwtIGZ1bmN0aW9uKHZhbHVlLCB0eXBlPSIxIil7CiAgYW5zIDwtIHN3aXRjaCAodHlwZSwKICAgICIxIiA9IHZhbHVlIF4gMiwKICAgICIyIiA9IHZhbHVlIF4gMC41CiAgKQogIHJldHVybihhbnMpCn0KYGBgCgojIyDlrp/ooYzkvosKYGBge3J9CnN3aXRjaFR5cGUoMTAwLCB0eXBlPSIxIikKYGBgCgojIyMg5b+c55So57eoCmBgYHtyfQpzb3VyY2UoImNhbGNfYW5zLlIiKQpmbmFtZSA8LSAic2FtcGxlX3RleHRzL3NhbXBsZV9lbi50eHQiCndvcmRzIDwtdG9sb3dlcih1bmxpc3Qoc3Ryc3BsaXQocmVhZExpbmVzKGZuYW1lKSwiW1s6c3BhY2U6XV18W1s6cHVuY3Q6XV0iKSkpCndvcmRzPC0gd29yZHNbd29yZHMgIT0gIiJdCnR5cGVvZihmbmFtZSkKdHlwZW9mKHdvcmRzKQpgYGAKCiMjIyDplqLmlbDjga7kvZzmiJAKYGBge3J9CmNhbGNSVFRSLm5ldyA8LSBmdW5jdGlvbihhcmcpewogIHByaW50KGxlbmd0aChhcmcpKQogIHByaW50KHR5cGVvZihhcmcpKQogIGlmICh0eXBlb2YoYXJnKSAhPSAiY2hhcmFjdGVyIikgc3RvcCgidW5leHBlY3RlZCBpbnB1dCIpCiAgaWYobGVuZ3RoKGFyZyk9PTEpewogICAgICByZXMgPC0gY2FsY1JUVFIxKGFyZykKICB9ZWxzZSBpZihsZW5ndGgoYXJnKT49Mil7CiAgICAgIHJlcyA8LSBjYWxjUlRUUjIoYXJnKQogIH0KICByZXR1cm4ocmVzKQp9CmBgYAoKIyMg5a6f6KGM5L6L77yRCmBgYHtyfQpjYWxjUlRUUi5uZXcoZm5hbWUpCmBgYAojIyDlrp/ooYzkvovvvJIKYGBge3J9CmNhbGNSVFRSLm5ldyh3b3JkcykKYGBgCgojIyDlrp/ooYzkvovvvJMKYGBge3J9CmNhbGNSVFRSLm5ldygxKQpgYGAKIyMg5YmN5Zue44Gu5a6f57+SCgojIyDmmYLplpPjgYzjgYLjgozjgbAuLi4KIyMjIOaMh+WumuODh+OCo+ODrOOCr+ODiOODquOBruODleOCoeOCpOODq+S4gOimp+OCkuWPluW+lyjnm7jlr77jg5HjgrkpCmBgYHtyfQpmTHN0PC0gbGlzdC5maWxlcygic2FtcGxlX3RleHRzIikKZkxzdApgYGAKCiMjIDxhIGhyZWY9Imh0dHBzOi8vd3d3MS5kb3NoaXNoYS5hYy5qcC9+bWppbi9SLzYwLzYwLmh0bWwiIHRhcmdldD0iX2JsYW5rIj5aaXBmJ3Pjga7ms5XliYc8L2E+CiQkRnJlcXVlbmN5PVxmcmFje0t9e1JhbmteQX0gICQkCkssQTog5a6a5pWwCgojIyMg44OG44Kt44K544OI44OV44Kh44Kk44OrIkdTTEMyMDIxLnR4dCLjga7ljZjoqp7poLvluqbjg4fjg7zjgr/jgpLlj5blvpcKYGBge3J9CmZyZXFEYXRhIDwtIGdldEZyZXEoIkdTTEMyMDIxLnR4dCIpCmRpbShmcmVxRGF0YSkKaGVhZChmcmVxRGF0YSkKYGBgCgpgYGB7cn0KSz1mcmVxRGF0YVsxLDFdCkE9MC44CgpyYW5rIDwtIHNlcSgxOmRpbShmcmVxRGF0YSlbMV0pCnppcGYgPC0gSy9yYW5rXkEKYGBgCgojIyMg44Kw44Op44OV5o+P55S7CiMjIyMg5Yeh5L6LOiBsZWdlbmQKYGBgCumFjee9ru+8muKAnGJvdHRvbXJpZ2h04oCdLCDigJxib3R0b23igJ0sIOKAnGJvdHRvbWxlZnTigJ0sIOKAnGxlZnTigJ0sIOKAnHRvcGxlZnTigJ0sIOKAnHRvcOKAnSwg4oCcdG9wcmlnaHTigJ0sIOKAnHJpZ2h04oCdLCDigJxjZW50ZXLigJ0K44Op44OZ44OrCmx0eTog57ea44Gu56iu6aGeCnBjaDog44OX44Ot44OD44OI44Gu56iu6aGeCmBgYApgYGB7ciwgZXZhbD1GQUxTRX0KI+eQhuirluWApApwbG90KHppcGYsIGxvZz0ieHkiLCB0eXBlPSJsIixjb2w9InJlZCIgLAp4bGltPWMoMSxucm93KGZyZXFEYXRhKSkseWxpbT1jKDEsNTApLG1haW49IlppcGYncyBMYXciLCB4bGFiPSJSYW5rIiwgeWxhYj0iRnJlcXVlbmN5IikKCiPpoLvluqbmlaPluIPlm7Pjga7ph43jga3mm7jjgY0KcGFyKG5ldz1UKQpwbG90KHJhbmssZnJlcURhdGFbLDFdLCB4bGltPWMoMSxucm93KGZyZXFEYXRhKSksIHlsaW09YygxLDUwKSxsb2c9Inh5IixwY2g9OCwgY29sPSJkYXJrZ3JlZW4iLCBtYWluPSJaaXBmJ3MgTGF3IiwgeGxhYj0iUmFuayIsIHlsYWI9IkZyZXF1ZW5jeSIpCgoj5Yeh5L6LCmxlZ2VuZCgidG9wcmlnaHQiLGMoIkZyZXF1ZW5jeSIsIlppcGYncyBsYXciKSxsdHk9YyhOQSwxKSxwY2g9Yyg4LE5BKSxjb2w9YygiZGFya2dyZWVuIiwicmVkIikpCgpgYGAKCmBgYHtyfQpwbG90KHppcGYsIGxvZz0ieHkiLCB0eXBlPSJsIixjb2w9InJlZCIgLAp4bGltPWMoMSxucm93KGZyZXFEYXRhKSkseWxpbT1jKDEsNTApLG1haW49IlppcGYncyBMYXciLCB4bGFiPSJSYW5rIiwgeWxhYj0iRnJlcXVlbmN5IikKcGFyKG5ldz1UKQpwbG90KHJhbmssZnJlcURhdGFbLDFdLCB4bGltPWMoMSxucm93KGZyZXFEYXRhKSksIHlsaW09YygxLDUwKSxsb2c9Inh5IixwY2g9OCwgY29sPSJkYXJrZ3JlZW4iLCBtYWluPSJaaXBmJ3MgTGF3IiwgeGxhYj0iUmFuayIsIHlsYWI9IkZyZXF1ZW5jeSIpCmxlZ2VuZCgidG9wcmlnaHQiLGMoIkZyZXF1ZW5jeSIsIlppcGYncyBsYXciKSxsdHk9YyhOQSwxKSxwY2g9Yyg4LE5BKSxjb2w9YygiZGFya2dyZWVuIiwicmVkIikpCmBgYAoKICAKICA=