按顺序,数字的前缀为NA
问题描述:
我想创建一个Sieve of Eratosthenes,它非常简单,但当我尝试在正确的位置调用所有值时,如我在下面的seq.int
中做的,我收到一条很奇怪的错误消息,因为prime * 2
绝对只是一个数字。按顺序,数字的前缀为NA
q4 <- function (n) {
art <- rep (TRUE, n)
art [1] <- FALSE
prime <- 2
for (i in 2:n) {
if (i^2 > n) {break}
else {
art [seq.int (2 * prime, length (art), prime)] <- FALSE
prime <- min (which (art [prime + 1:length (art)]))
}
}
art
}
q4(20)
Error in seq.int(from = 2 * prime, to = length(art), by = prime) :
'from' cannot be NA, NaN or infinite
In addition: Warning message:
In min(which(art[prime + 1:length(art)])) :
no non-missing arguments to min; returning Inf
我很想知道这个表达式中的什么使得R被称为NA。 谢谢!
答
你得到的错误,由于下面的问题,如果art
充满FALSE
,那么prime <- min (which (art [prime + 1:length (art)]))
结果是Inf
=>Inf * 2 = Inf == NaN
。
和'art' _is_在某个点上充满了'FALSE'。尝试在for循环的第一行添加'cat(i,prime,“\ n”,art,“\ n”)'行。 – G5W