来自R中随机样本的素数

时间:2017-11-06 11:49:53

标签: r

我编写了以下代码,试图从随机生成的数据集中查找所有素数。遗憾的是,似乎出了问题,任何人都可以帮助我。

set.seed(20171106)
n <- 10000
num <- sample(1:100000,n,replace=TRUE)
findPrime <- function(x){
apple<-c()
n<-length(x)
for(i in n){
    if(any(x[i]%%(1:(x[i]-1))!=0)) apple <-c(apple,x[i])
}
return(apple)
}

获得结果: 类型:findPrime(NUM) 这是警告信息:

Warning message:
In if (x[i]%%(1:(x[i] - 1)) == 0) apple <- c(apple, x[i]) :
  the condition has length > 1 and only the first element will be used

那我怎么解决这个问题呢?

2 个答案:

答案 0 :(得分:0)

if语句只接受单个元素,并且在您的声明中似乎获得了整个向量。我使用ifelse循环中包含的sapply表达式重写了您的函数。

我希望这适合你。

findPrime <- function(x = 0){

      primes <- c()

      # Prime finder
      primes <- sapply(X = x,FUN =  function(x) {
        ifelse(any(x %% (1:(x - 1)) != 0), T, F)}
        )

      # Select primes                 
      primes <- num[primes]

      return(primes)
    }

    findPrime(num)

我已经检查了另一个愚蠢的错误...在选择素数步骤中num的函数内部更改x并反转FT结果。它应该是这样的:

findPrime <- function(x = 0){

  primes <- c()

  # Prime finder
  primes <- sapply(X = x,FUN =  function(x) {
    ifelse(any(x %% (2:(x - 1)) == 0), F, T)}
  )

  # Select primes                 
  primes <- x[primes]

  return(primes)
}

我刚尝试过,它运行正常。

答案 1 :(得分:-1)

使用包“gmp”,其函数为“isprime”,非素数返回0,素数返回2,然后根据相同的数据对数据进行子集

说你有一个向量a = c(1:10)

c

在你的代码中:for(i in 1:n),出现错误