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
我不知道是什么原因导致长度为零。
答案 0 :(得分:1)
R不能那样工作。您只是具有打印单词“ TRUE”或“ FALSE”的功能。相反,您需要?return TRUE
或FALSE
。考虑:
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