Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中执行if语句时出错_R_Text Processing - Fatal编程技术网

在R中执行if语句时出错

在R中执行if语句时出错,r,text-processing,R,Text Processing,我有这个小函数来获取文本的协和度分数 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(w

我有这个小函数来获取文本的协和度分数

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)
}
它给了我这个错误:

> 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

表示长度为j(单词[[1]])
没有达到您期望的效果<代码>j仅与列表的全长相等。这也意味着
j+1
从列表的末尾运行(因此
words[[1]][j+1]
返回
NA

将的
循环行更改为

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

返回3

正如评论中所指出的那样,一种更好、计算更有效、更简洁的方法将是可行的

all_words <- unlist(strsplit(book, " "))
count <- sum(substr(head(all_words, -1), 1, 1) ==
             substr(tail(all_words, -1), 1, 1))
长度为j的所有单词
(单词[[1]])
没有达到你期望的效果<代码>j
仅与列表的全长相等。这也意味着
j+1
从列表的末尾运行(因此
words[[1]][j+1]
返回
NA

循环行更改为

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

返回3

正如评论中所指出的那样,一种更好、计算更有效、更简洁的方法将是可行的

all_words <- unlist(strsplit(book, " "))
count <- sum(substr(head(all_words, -1), 1, 1) ==
             substr(tail(all_words, -1), 1, 1))
长度为j的所有单词
(单词[[1]])
没有达到你期望的效果<代码>j
仅与列表的全长相等。这也意味着
j+1
从列表的末尾运行(因此
words[[1]][j+1]
返回
NA

循环行更改为

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

返回3

正如评论中所指出的那样,一种更好、计算更有效、更简洁的方法将是可行的

all_words <- unlist(strsplit(book, " "))
count <- sum(substr(head(all_words, -1), 1, 1) ==
             substr(tail(all_words, -1), 1, 1))
长度为j的所有单词
(单词[[1]])
没有达到你期望的效果<代码>j
仅与列表的全长相等。这也意味着
j+1
从列表的末尾运行(因此
words[[1]][j+1]
返回
NA

循环行更改为

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

返回3

正如评论中所指出的那样,一种更好、计算更有效、更简洁的方法将是可行的

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


if语句中的所有单词都以某种方式返回NA(因此在true/false错误处缺少值)。你确定substr(单词[[1]][j],1,1)和substr(单词[[1]][j+1],1,1)都不为空吗?
j+1
在循环的唯一迭代中大于
length(单词[[1]])
。请注意,当你除以
length(book)
时,你是除以书中的行数,而不是单词数(因此,在您的示例中,它将除以1,而不是5)。你的意思是使用字数吗?还要注意,你永远不会用这种方法从一行到下一行进行比较-你想这样做吗?@DavidRobinson非常感谢你指出这一点!我想我的意思是用它除以字数,只是改成包括这一行:totalWords@QPTR你想比较一行的最后一个字吗行到下一行的第一个字?如果是这样,一个更简单的方法是
If语句的所有字都以某种方式返回NA(因此在true/false错误处缺少值)。您确定substr(字[[1]][j],1,1)和substr(字[[1]][j+1],1,1]都不为空吗?
j+1
大于
长度(字[[1]]
在循环的唯一迭代中进行。请注意,当您除以
长度(书本)
时,您是除以书本中的行数,而不是单词数(因此在您的示例中,它将除以1,而不是5)。你的意思是使用字数吗?还要注意,你永远不会用这种方法从一行到下一行进行比较-你想这样做吗?@DavidRobinson非常感谢你指出这一点!我想我的意思是用它除以字数,只是改成包括这一行:totalWords@QPTR你想比较一行的最后一个字吗行到下一行的第一个字?如果是这样,一个更简单的方法是
If语句的所有字都以某种方式返回NA(因此在true/false错误处缺少值)。您确定substr(字[[1]][j],1,1)和substr(字[[1]][j+1],1,1]都不为空吗?
j+1
大于
长度(字[[1]]
在循环的唯一迭代中进行。请注意,当您除以
长度(书本)
时,您是除以书本中的行数,而不是单词数(因此在您的示例中,它将除以1,而不是5)。你的意思是使用字数吗?还要注意,你永远不会用这种方法从一行到下一行进行比较-你想这样做吗?@DavidRobinson非常感谢你指出这一点!我想我的意思是用它除以字数,只是改成包括这一行:totalWords@QPTR你想比较一行的最后一个字吗行到下一行的第一个字?如果是这样,一个更简单的方法是
If语句的所有字都以某种方式返回NA(因此在true/false错误处缺少值)。您确定substr(字[[1]][j],1,1)和substr(字[[1]][j+1],1,1]都不为空吗?
j+1
大于
长度(字[[1]]
在循环的唯一迭代中进行。请注意,当您除以
长度(书本)
时,您是除以书本中的行数,而不是单词数(因此在您的示例中,它将除以1,而不是5)。你的意思是使用字数吗?还要注意,你永远不会用这种方法从一行到下一行进行比较-你想这样做吗?@DavidRobinson非常感谢你指出这一点!我想我的意思是用它除以字数,只是改成包括这一行:totalWords@QPTR你想比较一行的最后一个字吗行到下一行的第一个单词?如果是这样,一个更简单的方法是
所有单词,而使用
seq_len
则更公平