Lecture4: 関数の作成
作業ディレクトリの設定
setwd("/cloud/project")
notebookのコメント記入時の注意
スクリプト実行セルに全角スペースを入れるとエラーがでるので気をつけてください。
paste("Sum = ", res_sum0) #足し算の結果をプリントアウト出力
[1] "Sum = 22"
paste("Sum = ", res_sum0) # 足し算の結果をプリントアウト出力
Error: unexpected input in "paste("Sum = ", res_sum0) "
関数の作成
古典的な説明
戻り値なし関数(関数から戻ってくる値はない)
paste("Sum = ", res_sum0) #足し算の結果をプリントアウト出力
Error: object 'res_sum0' not found
test_plus0の実行
test_plus0(10, 20)
[1] "Sum = 30"
戻り値あり関数:test_plus1関数を作成
test_plus1 <- function(x = 0, y = 0) {
res_sum1 <- x + y
return(res_sum1)
}
test_plus1の実行
test_plus1(10, 20)
[1] 30
補足
return()関数をつけなくても戻り値ありの関数になる
test_plus2 <- function(x = 0, y = 0) {
res_sum2 <- x + y
print(res_sum2)
}
test_plus2(10, 20)
[1] 30
test_plus3(10, 20)
[1] 30
復習:単語リストの作成
Step1. 一行ずつ読み込んで、リストに格納 Step2.
スペース・記号による区切り Step3. 各行のデータを一括化 Step4.
小文字に変換 Step5. 空白”“の削除
txt<-readLines("sample_texts/sample_en.txt")
Warning: cannot open file 'sample_texts/sample_en.txt': No such file or directoryError in file(con, "r") : cannot open the connection
結果部分出力
head(wordLst)
[1] "greetings" "everyone" "today" "i" "was" "appointed"
TTRの計算
paste("TTR =", round(res_TTR,3))
[1] "TTR = 42.654"
戻り値なし関数:printTTR0関数を作成
printTTR0<- function(wLst) {
num_tokens <- length(wLst)
num_types <- length(unique(wLst))
res_TTR <- num_types/num_tokens * 100
paste("TTR =", round(res_TTR,3))
}
printTTR0関数の実行
printTTR0(wordLst)
[1] "TTR = 42.654"
戻り値あり関数:calcTTR1関数を作成
引数: 単語リスト
戻り値: TTR値
calcTTR1<- function(wLst) {
num_tokens <- length(wLst)
num_types <- length(unique(wLst))
res_TTR <- num_types/num_tokens * 100
return(round(res_TTR,3))
}
calcTTR1関数の実行
calcTTR1(wordLst)
[1] 42.654
戻り値の利用
result <- calcTTR1(wordLst)
戻り値あり関数:calcTTR2関数を作成
引数: Tokens, Types
戻り値: TTR計算値
calcTTR2<- function(arg_tokens,arg_types) {
res_TTR <- arg_types/arg_tokens * 100
return(round(res_TTR,3))
}
calcTTR2関数の実行
calcTTR2(tokens,types)
[1] 42.654
課題1
課題内容:テキストファイルのパス情報(文字列)を読み込んで、Guiraudの値を返す関数calcRTTRの作成してください。
- 作業場所: Posit Cloudの”Handson_2023_Lec04.Rmd”のセルに作成
- 実行確認:
“ou_msg/ou_msg_en.txt”と”sample-es.txt”のファイルを読み込んで、結果を出力
- 締切日:2023年11月7日(8日にファイルを確認します)
calcRTTR関数の作成場所(課題1の関数はこのセルに書いてください)
引数: 英文テキストのファイルパス(文字列)
戻り値: Guiraud計算値(小数点3桁表示)
calcRTTR関数の実行例1
引数: “ou_msg/ou_msg_en.txt”
戻り値: Guiraud計算値(小数点3桁表示)
calcRTTR("ou_msg/ou_msg_en.txt")
[1] 12.392
calcRTTR関数の実行例2
引数: “sample-es.txt”
戻り値: Guiraud計算値(小数点3桁表示)
calcRTTR("sample-es.txt")
[1] 6.641
おまけ
パス演算子%>%
magrittrパッケージのインストール
install.packages("magrittr")
purrrパッケージのインストール
install.packages("purrr")
ライブラリの読み込み
library(purrr)
Attaching package: ‘purrr’
The following object is masked from ‘package:magrittr’:
set_names
変数格納形式
txt<-readLines("ou_msg/ou_msg_en.txt")
wordLst <- strsplit(txt,"\\s|\\W")
wordLst<-unlist(wordLst)
wordLst<-tolower(wordLst)
wordLst<- wordLst[wordLst != ""]
パス演算子%>%表記
tmp<- readLines("ou_msg/ou_msg_en.txt") %>%
strsplit("\\s|\\W") %>%
unlist %>%
tolower %>%
keep(~ . != "") #function(x) x != ""
補足
strLst %>% "!="("")
[1] TRUE FALSE TRUE
purrr::keep関数
#wordLst[wordLst != ""]
keep(wordLst, ~ . != "") #function(x) x != ""
ラムダ(lambda)関数
~ . != ""
#function(x) x != ""
- チルダ(tilde)記号”~” says, “I’m going to give you a quick
function.”
- ドット記号”.” represents the current item being looked at.
- != “” is the actual instruction: “should not be an empty
string.”
LS0tCnRpdGxlOiAiTGVjMDQgKEZhbGwgMjAyMykiCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KCiMgTGVjdHVyZTQ6IOmWouaVsOOBruS9nOaIkAoKIyMg5L2c5qWt44OH44Kj44Os44Kv44OI44Oq44Gu6Kit5a6aCmBgYHtyfQpzZXR3ZCgiL2Nsb3VkL3Byb2plY3QiKQpgYGAKCiMjIG5vdGVib29r44Gu44Kz44Oh44Oz44OI6KiY5YWl5pmC44Gu5rOo5oSPCiMjIyDjgrnjgq/jg6rjg5fjg4jlrp/ooYzjgrvjg6vjgavlhajop5Ljgrnjg5rjg7zjgrnjgpLlhaXjgozjgovjgajjgqjjg6njg7zjgYzjgafjgovjga7jgafmsJfjgpLjgaTjgZHjgabjgY/jgaDjgZXjgYTjgIIKLSDljYrop5Ljgrnjg5rjg7zjgrkKYGBge3J9Cng8LTEwIAp4PC0yMApyZXNfc3VtMCA8LSB4ICsgeQpwYXN0ZSgiU3VtID0gIiwgcmVzX3N1bTApICPotrPjgZfnrpfjga7ntZDmnpzjgpLjg5fjg6rjg7Pjg4jjgqLjgqbjg4jlh7rlipsKYGBgCgotIOWFqOinkuOCueODmuODvOOCuQpgYGB7cn0KeDwtMTAKeDwtMjAKcmVzX3N1bTAgPC0geCArIHkKcGFzdGUoIlN1bSA9ICIsIHJlc19zdW0wKeOAgCPjgIDotrPjgZfnrpfjga7ntZDmnpzjgpLjg5fjg6rjg7Pjg4jjgqLjgqbjg4jlh7rlipsKYGBgCgoKIyDplqLmlbDjga7kvZzmiJAKIyMg6Zai5pWw77ya6KSH5pWw5Yem55CG44KS5LiA5ous44Gn5ZG844Gz5Ye644GZ5pmC44Gr5L6/5YipCi0gPGEgaHJlZj0iaHR0cHM6Ly9zdGF0cy5iaW9wYXB5cnVzLmpwL3IvYmFzaWMvZnVuY3Rpb24uaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPuWPguiAg+izh+aWmTogYmlvc3RhdGlzdGljcyDplqLmlbDjga7kvZzjgormlrk8L2E+CgojIyDlj6TlhbjnmoTjgaroqqzmmI4KIyMg5oi744KK5YCk44Gq44GX6Zai5pWw77yI6Zai5pWw44GL44KJ5oi744Gj44Gm44GP44KL5YCk44Gv44Gq44GE77yJCi0g5byV5pWwOiB4LCB5Ci0g5oi744KK5YCkOuOBquOBlwpgYGB7cn0KdGVzdF9wbHVzMCA8LSBmdW5jdGlvbih4ID0gMCwgeSA9IDApIHsKICByZXNfc3VtMCA8LSB4ICsgeQogIHBhc3RlKCJTdW0gPSAiLCByZXNfc3VtMCkgI+i2s+OBl+eul+OBrue1kOaenOOCkuODl+ODquODs+ODiOOCouOCpuODiOWHuuWKmwp9CmBgYAoKIyMgdGVzdF9wbHVzMOOBruWun+ihjApgYGB7cn0KdGVzdF9wbHVzMCgxMCwgMjApCmBgYAoKIyMg5oi744KK5YCk44GC44KK6Zai5pWw77yadGVzdF9wbHVzMemWouaVsOOCkuS9nOaIkAotIOW8leaVsDogeCwgeQotIOaIu+OCiuWApDogcmVzX3N1bTEKYGBge3J9CnRlc3RfcGx1czEgPC0gZnVuY3Rpb24oeCA9IDAsIHkgPSAwKSB7CiAgcmVzX3N1bTEgPC0geCArIHkKICByZXR1cm4ocmVzX3N1bTEpCn0KYGBgCgojIyB0ZXN0X3BsdXMx44Gu5a6f6KGMCmBgYHtyfQp0ZXN0X3BsdXMxKDEwLCAyMCkKYGBgCgojIyDoo5zotrMKIyMjIHJldHVybigp6Zai5pWw44KS44Gk44GR44Gq44GP44Gm44KC5oi744KK5YCk44GC44KK44Gu6Zai5pWw44Gr44Gq44KLCi0gdGVzdF9wbHVzMumWouaVsApgYGB7cn0KdGVzdF9wbHVzMiA8LSBmdW5jdGlvbih4ID0gMCwgeSA9IDApIHsKICByZXNfc3VtMiA8LSB4ICsgeQogIHByaW50KHJlc19zdW0yKQp9Cgp0ZXN0X3BsdXMyKDEwLCAyMCkKYGBgCgotIHRlc3RfcGx1czPplqLmlbAKYGBge3J9CnRlc3RfcGx1czMgPC0gZnVuY3Rpb24oeCA9IDAsIHkgPSAwKSB7CiAgeCArIHkKfQoKdGVzdF9wbHVzMygxMCwgMjApCmBgYAoKCiMjIOW+qee/ku+8muWNmOiqnuODquOCueODiOOBruS9nOaIkApTdGVwMS4g5LiA6KGM44Ga44Gk6Kqt44G/6L6844KT44Gn44CB44Oq44K544OI44Gr5qC857SNClN0ZXAyLiDjgrnjg5rjg7zjgrnjg7voqJjlj7fjgavjgojjgovljLrliIfjgooKU3RlcDMuIOWQhOihjOOBruODh+ODvOOCv+OCkuS4gOaLrOWMlgpTdGVwNC4g5bCP5paH5a2X44Gr5aSJ5o+bClN0ZXA1LiDnqbrnmb0iIuOBruWJiumZpApgYGB7cn0KdHh0PC1yZWFkTGluZXMoIm91X21zZy9vdV9tc2dfZW4udHh0IikKd29yZExzdCA8LSBzdHJzcGxpdCh0eHQsIlxcc3xcXFciKQp3b3JkTHN0PC11bmxpc3Qod29yZExzdCkKd29yZExzdDwtdG9sb3dlcih3b3JkTHN0KQp3b3JkTHN0PC0gd29yZExzdFt3b3JkTHN0ICE9ICIiXQpgYGAKCiMjIyDntZDmnpzpg6jliIblh7rlipsKLSBoZWFk6Zai5pWwCmBgYHtyfQpoZWFkKHdvcmRMc3QpCmBgYAoKIyMjIFRUUuOBruioiOeulwpgYGB7cn0KdG9rZW5zIDwtIGxlbmd0aCh3b3JkTHN0KQp0eXBlcyA8LSBsZW5ndGgodW5pcXVlKHdvcmRMc3QpKQpUVFIgPC0gdHlwZXMvdG9rZW5zKjEwMApwYXN0ZSgiVFRSID0iLCByb3VuZChUVFIsMykpCmBgYAoKIyMg5oi744KK5YCk44Gq44GX6Zai5pWw77yacHJpbnRUVFIw6Zai5pWw44KS5L2c5oiQCi0g5byV5pWwOiDljZjoqp7jg6rjgrnjg4gKLSDmiLvjgorlgKQ644Gq44GXCmBgYHtyfQpwcmludFRUUjA8LSBmdW5jdGlvbih3THN0KSB7CiAgICBudW1fdG9rZW5zIDwtIGxlbmd0aCh3THN0KQogICAgbnVtX3R5cGVzIDwtIGxlbmd0aCh1bmlxdWUod0xzdCkpCiAgICByZXNfVFRSIDwtIG51bV90eXBlcy9udW1fdG9rZW5zICogMTAwCiAgICBwYXN0ZSgiVFRSID0iLCByb3VuZChyZXNfVFRSLDMpKQp9CmBgYAoKIyMgcHJpbnRUVFIw6Zai5pWw44Gu5a6f6KGMCmBgYHtyfQpwcmludFRUUjAod29yZExzdCkKYGBgCgojIyDmiLvjgorlgKTjgYLjgorplqLmlbDvvJpjYWxjVFRSMemWouaVsOOCkuS9nOaIkAojIyMg5byV5pWwOiDljZjoqp7jg6rjgrnjg4gKIyMjIOaIu+OCiuWApDogVFRS5YCkCmBgYHtyfQpjYWxjVFRSMTwtIGZ1bmN0aW9uKHdMc3QpIHsKICAgIG51bV90b2tlbnMgPC0gbGVuZ3RoKHdMc3QpCiAgICBudW1fdHlwZXMgPC0gbGVuZ3RoKHVuaXF1ZSh3THN0KSkKICAgIHJlc19UVFIgPC0gbnVtX3R5cGVzL251bV90b2tlbnMgKiAxMDAKICAgIHJldHVybihyb3VuZChyZXNfVFRSLDMpKQp9CmBgYAoKIyMgY2FsY1RUUjHplqLmlbDjga7lrp/ooYwKYGBge3J9CmNhbGNUVFIxKHdvcmRMc3QpCmBgYAoKIyMgIOaIu+OCiuWApOOBruWIqeeUqApgYGB7cn0KcmVzdWx0IDwtIGNhbGNUVFIxKHdvcmRMc3QpCmBgYAoKIyMg5oi744KK5YCk44GC44KK6Zai5pWw77yaY2FsY1RUUjLplqLmlbDjgpLkvZzmiJAKIyMjIOW8leaVsDogVG9rZW5zLCBUeXBlcwojIyMg5oi744KK5YCkOiBUVFLoqIjnrpflgKQKYGBge3J9CmNhbGNUVFIyPC0gZnVuY3Rpb24oYXJnX3Rva2VucyxhcmdfdHlwZXMpIHsKICAgIHJlc19UVFIgPC0gYXJnX3R5cGVzL2FyZ190b2tlbnMgKiAxMDAKICAgIHJldHVybihyb3VuZChyZXNfVFRSLDMpKQp9CmBgYAoKIyMgY2FsY1RUUjLplqLmlbDjga7lrp/ooYwKYGBge3J9CmNhbGNUVFIyKHRva2Vucyx0eXBlcykKYGBgCgojIDxzcGFuIHN0eWxlPSJjb2xvcjogYmx1ZTsiPuiqsumhjO+8kTwvc3Bhbj4gCiMjIOiqsumhjOWGheWuue+8muODhuOCreOCueODiOODleOCoeOCpOODq+OBruODkeOCueaDheWgse+8iOaWh+Wtl+WIl++8ieOCkuiqreOBv+i+vOOCk+OBp+OAgUd1aXJhdWTjga7lgKTjgpLov5TjgZnplqLmlbBjYWxjUlRUUuOBruS9nOaIkOOBl+OBpuOBj+OBoOOBleOBhOOAggotIOS9nOalreWgtOaJgDogUG9zaXQgQ2xvdWTjga4iSGFuZHNvbl8yMDIzX0xlYzA0LlJtZCLjga7jgrvjg6vjgavkvZzmiJAKLSDlrp/ooYznorroqo06ICJvdV9tc2cvb3VfbXNnX2VuLnR4dCLjgagic2FtcGxlLWVzLnR4dCLjga7jg5XjgqHjgqTjg6vjgpLoqq3jgb/ovrzjgpPjgafjgIHntZDmnpzjgpLlh7rlipsKLSDnt6DliIfml6U6MjAyM+W5tDEx5pyIN+aXpe+8iDjml6Xjgavjg5XjgqHjgqTjg6vjgpLnorroqo3jgZfjgb7jgZnvvIkKCiMjIGNhbGNSVFRS6Zai5pWw44Gu5L2c5oiQ5aC05omA77yI6Kqy6aGM77yR44Gu6Zai5pWw44Gv44GT44Gu44K744Or44Gr5pu444GE44Gm44GP44Gg44GV44GE77yJCiMjIyDlvJXmlbA6ICDoi7Hmlofjg4bjgq3jgrnjg4jjga7jg5XjgqHjgqTjg6vjg5HjgrnvvIjmloflrZfliJfvvIkKIyMjIOaIu+OCiuWApDogR3VpcmF1ZOioiOeul+WApCjlsI/mlbDngrnvvJPmoYHooajnpLopCmBgYHtyLCBlY2hvPUZBTFNFfQpjYWxjUlRUUjwtIGZ1bmN0aW9uKGZuYW1lKSB7CiAgICB0eHQ8LXJlYWRMaW5lcyhmbmFtZSkKICAgIHdvcmRMc3Q8LXN0cnNwbGl0KHR4dCwiXFxzfFxcVyIpCiAgICB3b3JkTHN0PC11bmxpc3Qod29yZExzdCkKICAgIHdvcmRMc3Q8LXRvbG93ZXIod29yZExzdCkKICAgIHdvcmRMc3Q8LSB3b3JkTHN0W3dvcmRMc3QgIT0gIiJdCiAgICBudW1fdG9rZW5zIDwtIGxlbmd0aCh3b3JkTHN0KQogICAgbnVtX3R5cGVzIDwtIGxlbmd0aCh1bmlxdWUod29yZExzdCkpCiAgICByZXNfRyA8LSByb3VuZChudW1fdHlwZXMvc3FydChudW1fdG9rZW5zKSwzKQogICAgcmV0dXJuKHJlc19HKQp9CmBgYAoKIyMjIGNhbGNSVFRS6Zai5pWw44Gu5a6f6KGM5L6L77yRCiMjIyDlvJXmlbA6ICAib3VfbXNnL291X21zZ19lbi50eHQiCiMjIyDmiLvjgorlgKQ6IEd1aXJhdWToqIjnrpflgKQo5bCP5pWw54K577yT5qGB6KGo56S6KQpgYGB7cn0KY2FsY1JUVFIoIm91X21zZy9vdV9tc2dfZW4udHh0IikKYGBgCgojIyMgY2FsY1JUVFLplqLmlbDjga7lrp/ooYzkvovvvJIKIyMjIOW8leaVsDogICJzYW1wbGUtZXMudHh0IgojIyMg5oi744KK5YCkOiBHdWlyYXVk6KiI566X5YCkKOWwj+aVsOeCue+8k+ahgeihqOekuikKYGBge3J9CmNhbGNSVFRSKCJzYW1wbGUtZXMudHh0IikKYGBgCgojIOOBiuOBvuOBkQojIyDjg5HjgrnmvJTnrpflrZAlPiUKLSDopIfmlbDlh6bnkIbjgavjgYrjgZHjgovlgKTjga7lvJXjgY3muKHjgZcKLSA8YSBocmVmPSJodHRwczovL3Nob2hlaS1kb2kuZ2l0aHViLmlvL3F1YW50X3BvbGlzY2kvcGlwZS5odG1sIiB0YXJnZXQ9Il9ibGFuayI+5Y+C6ICD6LOH5paZOiDljJflpKfjg7vlnJ/kupXnv5TlubPlhYjnlJ/jga7jgrXjgqTjg4jjgojjgoo8L2E+CgojIyMgbWFncml0dHLjg5Hjg4PjgrHjg7zjgrjjga7jgqTjg7Pjgrnjg4jjg7zjg6sKYGBge3IsIGV2YWw9RkFMU0V9Cmluc3RhbGwucGFja2FnZXMoIm1hZ3JpdHRyIikKYGBgCgojIyMgcHVycnLjg5Hjg4PjgrHjg7zjgrjjga7jgqTjg7Pjgrnjg4jjg7zjg6sKYGBge3IsIGV2YWw9RkFMU0V9Cmluc3RhbGwucGFja2FnZXMoInB1cnJyIikKYGBgCgojIyMg44Op44Kk44OW44Op44Oq44Gu6Kqt44G/6L6844G/CmBgYHtyfQpsaWJyYXJ5KG1hZ3JpdHRyKQpsaWJyYXJ5KHB1cnJyKQpgYGAKCiMjIOWkieaVsOagvOe0jeW9ouW8jwpgYGB7cn0KdHh0PC1yZWFkTGluZXMoIm91X21zZy9vdV9tc2dfZW4udHh0IikKd29yZExzdCA8LSBzdHJzcGxpdCh0eHQsIlxcc3xcXFciKQp3b3JkTHN0PC11bmxpc3Qod29yZExzdCkKd29yZExzdDwtdG9sb3dlcih3b3JkTHN0KQp3b3JkTHN0PC0gd29yZExzdFt3b3JkTHN0ICE9ICIiXQpgYGAKCiMjIOODkeOCuea8lOeul+WtkCU+JeihqOiomApgYGB7ciwgZXZhbD1GQUxTRX0KdG1wPC0gcmVhZExpbmVzKCJvdV9tc2cvb3VfbXNnX2VuLnR4dCIpICU+JSAKICBzdHJzcGxpdCgiXFxzfFxcVyIpICU+JSAKICB1bmxpc3QgJT4lIAogIHRvbG93ZXIgJT4lIAogIGtlZXAofiAuICE9ICIiKSAjZnVuY3Rpb24oeCkgeCAhPSAiIgpgYGAKCiMjIyDoo5zotrMKYGBge3J9CnN0ckxzdDwtYygiYSIsIiIsImMiKQpzdHJMc3QgIT0gIiIKc3RyTHN0ICU+JSAiIT0iKCIiKQpgYGAKCiMjIyBwdXJycjo6a2VlcOmWouaVsApgYGB7ciwgZXZhbD1GQUxTRX0KI3dvcmRMc3Rbd29yZExzdCAhPSAiIl0Ka2VlcCh3b3JkTHN0LCB+IC4gIT0gIiIpICNmdW5jdGlvbih4KSB4ICE9ICIiCmBgYAoKIyMjIOODqeODoOODgChsYW1iZGEp6Zai5pWwCmBgYAp+IC4gIT0gIiIKI2Z1bmN0aW9uKHgpIHggIT0gIiIKYGBgCi0g44OB44Or44OAKHRpbGRlKeiomOWPtyJ+IiBzYXlzLCAiSSdtIGdvaW5nIHRvIGdpdmUgeW91IGEgcXVpY2sgZnVuY3Rpb24uIgotIOODieODg+ODiOiomOWPtyIuIiByZXByZXNlbnRzIHRoZSBjdXJyZW50IGl0ZW0gYmVpbmcgbG9va2VkIGF0LgotICE9ICIiIGlzIHRoZSBhY3R1YWwgaW5zdHJ1Y3Rpb246ICJzaG91bGQgbm90IGJlIGFuIGVtcHR5IHN0cmluZy4iCgoKCg==