R中的For循环,替换第n和第n + 1

问题描述 投票:0回答:3

我需要一些我一直在使用的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元素,但我不知道如何将它放在循环中。

非常感谢所有帮助!

r for-loop
3个回答
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)  
  }
}
}

0
投票

你也可以试试这个:

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

0
投票

不需要外环:

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
© www.soinside.com 2019 - 2024. All rights reserved.