在 R 中执行 if 语句时出错

Error while executing an if statement in R

我有这个小功能来获取文本的共鸣分数

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)
}

它所做的是获取一个列表,其中第一行文本位于第二个位置,第二行文本依此类推。得到这一行后,它将句子拆分,并将其放入包含所有组成词的列表中。我所做的是将第一个单词的第一个字母与第二个单词的第一个字母进行比较,将第二个单词的第一个字母与第三个单词的第一个字母进行比较,以获得总的谐音分数。然后除以书的长度。当我尝试使用以下形式的小输入列表 '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 的初学者,非常感谢任何帮助。谢谢!

编辑:应该是 getAlliterationScore 而不是 getAssonanceScore :D

for j in length(words[[1]]) 没有达到您的预期; j 只等于列表的全长。这也意味着 j + 1 从列表的末尾运行(因此 words[[1]][j + 1] returns NA)。

将您的 for 循环线更改为

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

现在

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

returns3.

如评论中所述,更好、计算效率更高、更简洁的方法是

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