如果语句“参数长度为零”,则发生R错误

时间:2018-11-10 07:01:19

标签: r function if-statement

我编写了三个函数,其中两个函数(即 function1 function2 )用于 populatedataset 的另一个函数。

当我遇到错误Error in if (num == 1) { : argument is of length zero

时,我正在运行函数 populatedataset

我认为这是由于 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)
}

我已经在其他页面上阅读了此错误,但似乎找不到与该问题相关的解决方案。

我将不胜感激对此错误有任何见解!

1 个答案:

答案 0 :(得分:0)

if条件必须为TRUEFALSE。此错误表示num == 1的值为logical(0)。这可能是由于num为空,即numeric(0)引起的,因为此时您正在比较长度为0到1的数字值,这给出了长度为0的逻辑。您可以包装条件{{1} }和num == 1函数,它将把isTRUE变成logical(0)

FALSE

函数if (isTRUE(num == 1)){.... 检查参数是否为逻辑值isTRUE。由于在这种情况下,TRUEnum == 1,因此logical(0)将返回isTRUE,而FALSE的作用将是正确的。

在旁注中:ifnum可能是由于以下事实导致的:numeric(0)不是任何人的person == as.character(personindex),因此,如果您索引表时没有{{1 }}返回值。在这种情况下,如果使用我的解决方案,您将遇到TRUE-newpersonality构造的else部分。