循环返回错误:“参数长度为零”

时间:2019-03-10 23:11:09

标签: r runtime-error

i <- 2
j <- 0
for (i in 2:1000) {
  if(return.prime(i)){j = j + 1}
  i = i + 1
}

我想使用我自己的函数return.prime检查1到1000中有多少个质数,当数字输入为质数时返回TRUE,而数字输入非质数时返回FALSE。 return.prime函数是下面的函数,它是正确的。

return.prime <- function(d){
  if(d ==1 ){print(FALSE)}
  if (d == 2){
    print(TRUE)
  }
  if(d !=2 && d!=1){
      if(any(d %% (2:(d-1)) == rep(0,d-2))==TRUE){
        print(FALSE)}
      else
        print(TRUE)
  }
}

问题是当我运行程序时它说:


[1] TRUE
Error in if (return.prime(i)) { : argument is of length zero

我不知道是什么原因导致长度为零。

1 个答案:

答案 0 :(得分:1)

R不能那样工作。您只是具有打印单词“ TRUE”或“ FALSE”的功能。相反,您需要?return TRUEFALSE。考虑:

return.prime <- function(d){
  if(d==1){ return(FALSE) }
  if(d==2){ return(TRUE)  }
  if(d !=2 && d!=1){
      if(any(d %% (2:(d-1)) == rep(0,d-2))==TRUE){
        return(FALSE)
      } else{
        return(TRUE)
      }
  }
}

i <- 2
j <- 0
for (i in 2:1000) {
  if(return.prime(i)){j = j + 1}
  i = i + 1
}
j  # [1] 168