/ R-rでifステートメントを実行している間の/エラー、テキスト処理

R - rのifステートメントの実行中にエラーが発生しました、テキスト処理

私はこの小さな機能を持っていて、テキストの一致スコアを取得します。

getAssonanceScore <- function(book, count) {
#for each sentence

for (i in length(book[[1]])){
words <- strsplit(book[i], "\ ")

for (j in length(words[[1]])){
if (substr(words[[1]][j],1,1) == substr(words[[1]][j+1],1,1) ) {
count <- count + 1
}

}

}

count <- count / length(book)

return (count)
}

それがすることはそれが1行のリストを得ることですその1番目の位置にあるテキストの2番目の位置にあるテキストの2行目などです。この行を取得した後、文を分割し、それをすべての構成単語を含むリストに入れます。それを行うのは、最初の単語の最初の文字を2番目の単語の最初の文字と比較し、2番目の単語の最初の文字と3番目の単語の最初の文字を比較して総和声スコアを得ることです。次にこれを本の長さで割る。私はこの関数をフォームの小さな入力リスト "word"でテストしようとしたとき:

> words
[1] "babbling brook by blue grass"

それは私にこのエラーを与える:

> Error in if (substr(words[[1]][j], 1, 1) == substr(words[[1]][j + 1],
> :    missing value where TRUE/FALSE needed

私はRStudioで働いています、そしてRの非常に初心者です、どんな助けでも大いに感謝されるでしょう。ありがとうございます。

編集:getAssonanceScore:DではなくgetAlliterationScoreにしてください。

回答:

回答№1の場合は3

for j in length(words[[1]]) 期待通りのことをしない。 j リストの全長に等しいです。これはまた j + 1 リストの最後から実行します words[[1]][j + 1] 返品 NA)。

あなたの変更 for ループライン

        for (j in seq_len(length(words[[1]]) - 1)) {

getAssonanceScore("babbling brook by blue grass", 0)

3を返します。

コメントで述べたように、より良い、計算上より効率的で、より簡潔なアプローチは、

all_words <- unlist(strsplit(book, " "))
count <- sum(substr(head(all_words, -1), 1, 1) ==
substr(tail(all_words, -1), 1, 1))