2016-10-29 4 views
0

for 루프에 대한 도움이 필요합니다. 내가 한 일이 가능한지 모르겠지만, 내가 일하도록 도울 수 있기를 바랍니다.for-loop in R, n 번째와 n 번째 + 1을 대체합니다.

처음에는 100 개의 요소 목록이 모두 거짓입니다. 요소를 변경하기 위해 100 개의 변수를 전달하려고합니다 (FALSE/TRUE). 1 단계는 모든 요소를 ​​TRUE로 변경해야합니다. 2 단계마다 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 수있는 모든 요소를 ​​합계를,하지만 난 루프에 그것을 넣어하는 방법을 모른다 : 여기

는 내가 지금까지 가지고있는 것입니다.

모든 도움을 많이 받으실 수 있습니다!

+1

미안 불분명 한 경우 Hack- 추측으로 수 (Nr)에 의해 I (단계를 의미 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

첫 단계가 실종되었다는 것을 알았습니다. 코드는 다음으로 시작합니다. for (i in X) { 루프를 100 단계 모두 수행 할 수 있습니까? –

+0

감사합니다, 당신의 대답은 매우 도움이되었습니다. 문제는 3 단계뿐만 아니라 100 단계를 적용하기 위해서입니다. 모든 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