在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
则更公平