2016-10-29 48 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