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

时间:2016-10-29 16:38:57

标签: r for-loop

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

非常感谢所有帮助!

3 个答案:

答案 0 :(得分: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)  
  }
}
}

答案 1 :(得分: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

答案 2 :(得分: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