Lecture5:関数mergeの補足
作業ディレクトリの確認
getwd()
## [1] "/cloud/project"
”sample_en.txt”の頻度テーブル
txt1<-readLines("sample_texts/sample_en.txt")
wordLst<-strsplit(txt1,"[[:space:]]|[[:punct:]]")
wordLst<-unlist(wordLst)
wordLst<-tolower(wordLst)
wordLst<- wordLst[wordLst != ""]
freq1 <- table(wordLst)
freq_data1<-sort(freq1, decreasing=TRUE)
(freqData1 <- data.frame(freq_data1))
”shiny.txt”の頻度テーブル
txt2<-readLines("shiny.txt")
wordLst<-strsplit(txt2,"[[:space:]]|[[:punct:]]")
wordLst<-unlist(wordLst)
wordLst<-tolower(wordLst)
wordLst<- wordLst[wordLst != ""]
freq2 <- table(wordLst)
freq_data2<-sort(freq2, decreasing=TRUE)
(freqData2 <- data.frame(freq_data2))
2つのデータ型変数を連結(merge)
全ての単語
freqData1_2 <-merge(freqData1, freqData2, all=T, by="wordLst")
head(freqData1_2)
共通単語のみ
merge(freqData1, freqData2, by="wordLst")
freqData1の単語
merge(freqData1, freqData2, all.x=TRUE, by="wordLst")
freqData2の単語
merge(freqData1, freqData2, all.y=TRUE, by="wordLst")
空セル(NA)に値を代入
freqData1_2[is.na(freqData1_2)] <- 0
head(freqData1_2)
dplyrパッケージ: full_join関数(merge関数の代用)
インストール
install.packages("dplyr", dependencies = TRUE)
dplyrパッケージの読み込み
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
全単語結合
full_join(freqData1, freqData2, all = T, by = "wordLst")
共通単語のみ結合
inner_join(freqData1, freqData2, all = T, by = "wordLst")
条件文if(Lec04のやり残し部分)
calcSQRT
calcSQRT<- function(value) {
return(sqrt(value))
}
calc2ndPower
calc2ndPower<- function(value) {
return (value^2)
}
実行
tmp <- 100
calcSQRT(tmp)
## [1] 10
calc2ndPower(tmp)
## [1] 10000
条件文1
分岐条件: 分類値
calcTest1 <- function(value, type=1){
if(type==1){
ans <- calcSQRT(value)
}else if(type==2){
ans <- calc2ndPower(value)
}
return(ans)
}
実行
calcTest1(100)
## [1] 10
calcTest1(100,2)
## [1] 10000
条件文2
分岐条件: 真偽値
calcTest2 <- function(value, sqrtFlag=FALSE){
if(sqrtFlag==TRUE){
ans <- calcSQRT(value)
}else{
ans <- calc2ndPower(value)
}
return(ans)
}
実行
calcTest2(100)
## [1] 10000
calcTest2(100, sqrtFlag=TRUE)
## [1] 10
条件文3 switch
分岐条件: 分類値(文字列)
calcTest3 <- function(value, type="p"){
ans <- switch (type,
"s" = calcSQRT(value),
"p" = calc2ndPower(value)
)
return(ans)
}
実行
calcTest3(100)
## [1] 10000
calcTest3(100, type="s")
## [1] 10
calcTest3(100, type="p")
## [1] 10000
練習:引数に頻度タイプの選択を持ち、単語リスト情報から、粗頻度もしくは相対頻度のデータフレームが戻り値となる関数をファイル“utils.R”内に記述
第1引数: 単語リスト
第2引数: 頻度のタイプ(分類or真偽値)
utils.Rファイルの読み込み
source("utils.R")
getFreq関数の実行例1
getFreq(wordLst)
getFreq関数の実行例2
getFreq(wordLst, relative=TRUE)