【问题标题】:For-loop in R, replacing nth and nth+1R中的for循环,替换第n个和第n个+1
【发布时间】:2016-10-29 16:38:57
【问题描述】:

我需要一些关于我一直在使用的 for 循环的帮助。我不知道我所做的是否可行,但我希望你能帮助我实现它。

最初,我有一个包含 100 个元素的列表,这些元素都是 FALSE。 我想通过 100 个变量来更改元素(FALSE/TRUE)。 第 1 步应将每个元素更改为 TRUE, 第 2 步每隔一个元素更改一次(从 2 开始);如果 FALSE 到 TRUE,如果 TRUE 到 FALSE, 第 3 步每隔三个元素更改一次,依此类推。

这是我目前所拥有的:

X = rep(FALSE,100)

for (i in X) {
 if (i == X[1]) {
 X[X%%1==0] == TRUE
 } else {
   i = i+1
   k = X[X%%i==0]
   for (i in k) {
    if (k == TRUE) {
    replace(X, k, FALSE)
  } else {
    replace(X, k, TRUE)
   }
  }
 }
}

最后,我希望结果将所有为 TRUE 的元素相加,但我不知道如何将其放入循环中。

非常感谢所有帮助!

【问题讨论】:

  • 对不起,如果我不清楚,我的意思是步骤(如下面的 Hack-R 所猜测的)。

标签: r for-loop


【解决方案1】:
X = rep(FALSE,100)

for (i in 1:length(X)) { 
  # Reverse the value of every element, 
  # then every 2nd starting with 2, 
  # then every 3rd element starting with 3, 
  # etc, through every 100th element starting with 100
  for(j in 1:100){
  if(i %in% seq(j,length(X),j)){ 
    X[i] <- ifelse(X[i]==FALSE,TRUE,FALSE)  
  }
}
}

【讨论】:

  • 我现在看到我的第一步不见了!代码应该以: for (i in X) { Is it possible to make a loop through all 100 steps?
  • 谢谢,您的回答很有帮助。问题是我想应用 100 步,而不仅仅是 3 步。意思是我想将每个第 n 个元素的值反转到 100。是否可以使规则通用?再次感谢您的帮助!
  • @C.Bailey 现在我明白了。我已经相应地更新了解决方案。
  • 太完美了!非常感谢
  • @C.Bailey 顺便说一句,您可以点击绿色的复选标记,让未来的读者知道问题已解决。
【解决方案2】:

你也可以试试这个:

for (i in 1:100) X[seq(i, 100, i)]=!X[seq(i, 100, i)]

which(X)
# [1]   1   4   9  16  25  36  49  64  81 100

【讨论】:

    【解决方案3】:

    不需要外循环:

    X<- rep(FALSE,100)
    for(n in 1:length(X))
    {   ix<- n*(1:(length(X)/n))
        X[ix]<- !X[ix]
    }
    
     which(X)
    [1]   1   4   9  16  25  36  49  64  81 100
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-07
      • 2022-06-14
      • 2015-06-23
      • 1970-01-01
      • 1970-01-01
      • 2021-10-18
      相关资源
      最近更新 更多