【问题标题】:Nested while loop inside for loop only iterate over first elementfor 循环内的嵌套 while 循环仅迭代第一个元素
【发布时间】:2020-07-19 04:51:41
【问题描述】:

我的 sn-p 下面写在 R 上,以删除 vector 中的每个元素,这是 for each 中 x 的倍数 vector

函数运行时,循环只对向量中的第一个元素,即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)
 }
}

【问题讨论】:

    标签: r loops for-loop while-loop


    【解决方案1】:

    您可以使用以下内容:

    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
    

    【讨论】:

    • 否,例如对于n=6,结果是:2,3,5
    • 为什么要包括 2、3、5 而不是 1 和 4?
    • 因为2的倍数是4,6; 3的倍数是6; 4,5,6 的倍数不在列表中。所以,我退出了 4 和 6,我保留了 2,3,5。并且向量从数字 2 开始,我的向量中没有 1。
    • 例如,对于 n=12 我有 2,3,5,7,11
    • 我已经更新了答案。顺便说一句,从你的问题中不清楚你想做什么。也许,您可以在问题中包含此示例,以便清楚。