按顺序,数字的前缀为NA

按顺序,数字的前缀为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

+0

和'art' _is_在某个点上充满了'FALSE'。尝试在for循环的第一行添加'cat(i,prime,“\ n”,art,“\ n”)'行。 – G5W