2016-10-29 49 views
0

我需要一些帮助,我已经使用for循环。我不知道我所做的甚至是可能的,但我希望你能帮助我做到这一点。R中的For循环,替换nth和nth + 1

最初,我有一个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) 
    } 
    } 
} 
} 

最后我想要的结果,总结所有是真实的元素,但我不知道如何把在循环。

所有帮助非常感谢!

+1

很抱歉,如果我还不清楚,由NR我的意思是,步骤(通过Hack-的猜测R)。 –

回答

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

我现在看到我的第一步失踪了!该代码应该以: (我在X中){ 是否有可能使循环遍历所有100个步骤? –

+0

谢谢你,你的回答非常有帮助。问题是我想要应用100个步骤,而不仅仅是3个步骤。含义我想将每个第n个元素的值颠倒到100.是否可以使规则一般?再次感谢你的帮助! –

+0

@ C.Bailey现在我明白了。我已经相应地更新了解决方案。 –

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