嵌套在for循环内的while循环仅在第一个元素上迭代

时间:2020-04-07 03:48:32

标签: r loops for-loop while-loop

我下面的代码段写在 R 上,以删除vector中的每个元素,该元素是for each中x vector x的倍数。

函数运行时,循环仅适用于向量中的第一个元素,即2,并且不验证其余元素,例如3、4、5、6。我该如何解决?

my_function <- function(n){
X <- 2:n
i <- 2
 for (x in X){
   while (x*i <= n){
     a <- match(x*i,X)
     X <- X[-(a)]
     i <- i+1
  }
  print(X)
 }
}

1 个答案:

答案 0 :(得分:0)

您可以使用以下内容:

my_function <- function(n){
  #Create a sequence from 2 to n
  X <- 2:n
  #For every value in X
  for(i in X) {
    #Create a sequence from i + i to n with steps of i
    vals = seq(min(i + i, n), n, i)
    #Check which values in X are multiple
    inds <- X %in% vals
    #If any value is present 
    if(any(inds))
      #Remove it from X
      X <- X[!inds]
     }
     #Return remaining X
     return(X)
}

my_function(6)
#[1] 2 3 5
my_function(12)
#[1]  2  3  5  7 11