2014-02-23 2 views
1

왜 이것이 원하는 결과를 얻지 못하는지 알 수 없습니다. 여기 R for 루프에서 예기치 않은 결과가 발생했습니다.

내 벡터이다 :

여기
flowers = c("Flower", "Flower", "Vegatative", "Vegatative", "Dead") 

가 내 루프 :

분명히
Na = 0 
for (i in 1:length(flowers)){ 
    if (i != "Dead"){ 
    Na = Na + 1 
    } 
} 
Na 

나 4 동일해야합니다,하지만 난 인쇄 할 때 그것이 나에게 꽃의 상태를 5의 결과를 제공 그것은 모두 5를 인쇄합니다. 마지막으로 읽는 것을 원하지 않습니다. 내 문제가 뭐니?

감사합니다.

+3

'i'는 1과 5 사이의 숫자입니다. 결코 "죽은"이되지 않습니다. –

+0

'if (flowers [i]! = "Dead")' – Ananta

+1

또는 for for (i in flowers)'가 작동합니다. – rawr

답변

4

flowers의 값 수가 "Dead"가 아닌 것으로 계산하는 것 같습니다. R에서이 작업을 수행하는 방법은 다음과 같습니다

if (i != "Dead"){ 

이는 i의 값을 출력하는 것이 최선 이유를 이해하려면 다음

sum(flowers != "Dead") 
# [1] 4 
0

코드에서 버그가이 라인이다 루프 :

for (i in 1:length(flowers)){ 
    print(i) 
} 
[1] 1 
[1] 2 
[1] 3 
[1] 4 
[1] 5 

, 당신은 숫자 (벡터의 인덱스) 반복,하지만 당신은 테스트를 수행 할 때 실제로 벡터에서 값을 선택하지 않습니다.

for (i in 1:length(flowers)){ 
    print(flowers[i]) 
} 
[1] "Flower" 
[1] "Flower" 
[1] "Vegatative" 
[1] "Vegatative" 
[1] "Dead" 

을 그리고, 원래의 질문에 대한 대답은 이것이다 : 값에 액세스하려면 flowers[i] 사용

Na = 0 
for (i in 1:length(flowers)){ 
    if (flowers[i] != "Dead"){ 
    Na = Na + 1 
    } 
} 
Na 
[4] 

R 루프없이이 같은 계산을 수행하기위한 시설을 많이 제공 - 그것의 벡터화라고 불린다. 그것에 대한 좋은 기사는 John Cook의 5 Kinds of Subscripts in R입니다. 예를 들어, 다음과 같은 결과를 얻을 수 있습니다 :

length(flowers[flowers != "Dead"]) 
[1] 4 
관련 문제