我编写了三个函数,其中两个函数(即 function1 和 function2 )用于 populatedataset 的另一个函数。
当我遇到错误Error in if (num == 1) { : argument is of length zero
我认为这是由于 function2 造成的,原因是由于'if(num == 1){:'部分。
function2 <- function(data, table, dict) {
personindex <- substr(deparse(substitute(data)), start = 1, stop = 2)
num <- table[person == as.character(personindex)]$newpersonality
if (num == 1) {
proptable <- data %>% inner_join(dict[score == 1]) %>% count(word)
proportion <- sum(proptable$n)/nrow(data)
return(proportion)
}
else {
proptable <- data %>% inner_join(dict[score == 0]) %>% count(word)
proportion <- sum(proptable$n/nrow(data))
return(proportion)
}
}
populatedataset <- function(data, table, dict) {
list_a <- c(function1(data, dict), function2(data, table, dict))
return (list_a)
}
我已经在其他页面上阅读了此错误,但似乎找不到与该问题相关的解决方案。
我将不胜感激对此错误有任何见解!
答案 0 :(得分:0)
if
条件必须为TRUE
或FALSE
。此错误表示num == 1
的值为logical(0)
。这可能是由于num
为空,即numeric(0)
引起的,因为此时您正在比较长度为0到1的数字值,这给出了长度为0的逻辑。您可以包装条件{{1} }和num == 1
函数,它将把isTRUE
变成logical(0)
:
FALSE
函数if (isTRUE(num == 1)){....
检查参数是否为逻辑值isTRUE
。由于在这种情况下,TRUE
是num == 1
,因此logical(0)
将返回isTRUE
,而FALSE
的作用将是正确的。
在旁注中:if
是num
可能是由于以下事实导致的:numeric(0)
不是任何人的person == as.character(personindex)
,因此,如果您索引表时没有{{1 }}返回值。在这种情况下,如果使用我的解决方案,您将遇到TRUE
-newpersonality
构造的else
部分。