Dúvida com lógica booleana

Boa tarde Srs. Estou iniciando com a linguagem R e me deparei com uma situação da qual não tenho tido êxito em solucionar, preciso iterar sobre um vetor e onde houver valores NA substituí-los por 0, isso porque ao executar a função getValues da biblioteca raster sobre uma linha que contenha em algumas das células o valor NA, e tentar obter o somatório destas, o R me retorna NA, vou tentar ser mais claro: Tenho o seguinte vetor: > vetor [1] 575 618 558 549 499 487 450 412 382 342 365 254 311 362 312 335 339 267 300 350 527 555 561 545 [25] 597 580 548 576 624 664 632 NA 539 567 574 611 660 763 658 599 577 543 514 409 364 374 361 354 [49] 454 555 620 617 559 559 NA NA 544 560 Se eu fizer sum(vetor) obtenho isso: > sum(vetor) [1] NA Então tentei iterar sobre o vetor substituindo os valores NA por 0: > for (i in 1:length(vetor)){ + if (vetor[i]==NA){ + vetor[i]<-0}} Error in if (vetor[i] == NA) { : valor ausente onde TRUE/FALSE necessário > Pensei que talvez fosse necessário criar um objeto com o valor NA para realizar a comparação, criei o "vazio", mas obtenho o mesmo erro: > vazio [1] NA > for (i in 1:length(vetor)){ + if (vetor[i]==vazio[1]){ + vetor[i]<-0}} Error in if (vetor[i] == vazio[1]) { : valor ausente onde TRUE/FALSE necessário > Algum sugestão? Grato. [http://www.cerradinho.com/CBio.png] Franklin Januario da Silva Agricola 64 3634-2806 64 9979-0608 cerradinho.com.br<http://www.cerradinho.com.br>

Tente sum(vetor, na.rm = TRUE) Veja também help(sum) De: R-br [mailto:r-br-bounces@listas.c3sl.ufpr.br] Em nome de Franklin Januario da Silva Enviada em: quarta-feira, 29 de julho de 2015 14:31 Para: r-br@listas.c3sl.ufpr.br Assunto: [R-br] Dúvida com lógica booleana Boa tarde Srs. Estou iniciando com a linguagem R e me deparei com uma situação da qual não tenho tido êxito em solucionar, preciso iterar sobre um vetor e onde houver valores NA substituí-los por 0, isso porque ao executar a função getValues da biblioteca raster sobre uma linha que contenha em algumas das células o valor NA, e tentar obter o somatório destas, o R me retorna NA, vou tentar ser mais claro: Tenho o seguinte vetor:
vetor
[1] 575 618 558 549 499 487 450 412 382 342 365 254 311 362 312 335 339 267 300 350 527 555 561 545 [25] 597 580 548 576 624 664 632 NA 539 567 574 611 660 763 658 599 577 543 514 409 364 374 361 354 [49] 454 555 620 617 559 559 NA NA 544 560 Se eu fizer sum(vetor) obtenho isso:
sum(vetor)
[1] NA Então tentei iterar sobre o vetor substituindo os valores NA por 0:
for (i in 1:length(vetor)){
+ if (vetor[i]==NA){ + vetor[i]<-0}} Error in if (vetor[i] == NA) { : valor ausente onde TRUE/FALSE necessário
Pensei que talvez fosse necessário criar um objeto com o valor NA para realizar a comparação, criei o vazio, mas obtenho o mesmo erro:
vazio
[1] NA
for (i in 1:length(vetor)){
+ if (vetor[i]==vazio[1]){ + vetor[i]<-0}} Error in if (vetor[i] == vazio[1]) { : valor ausente onde TRUE/FALSE necessário
Algum sugestão? Grato. <http://www.cerradinho.com/CBio.png> Franklin Januario da Silva Agricola 64 3634-2806 64 9979-0608 cerradinho.com.br <http://www.cerradinho.com.br> --- This email has been checked for viruses by Avast antivirus software. https://www.avast.com/antivirus

On 07/29/2015 02:31 PM, Franklin Januario da Silva wrote:
Boa tarde Srs.
Estou iniciando com a linguagem R e me deparei com uma situação da qual não tenho tido êxito em solucionar, preciso iterar sobre um vetor e onde houver valores NA substituí-los por 0, isso porque ao executar a função getValues da biblioteca raster sobre uma linha que contenha em algumas das células o valor NA, e tentar obter o somatório destas, o R me retorna NA, vou tentar ser mais claro:
Franklin Se existir um NA os resultados são NA isto é uma convenção. Vários comando tem a opção na.rm que você coloca o valor TRUE ou T. Quando insto não for possível utilize na.exclude() []s Tura

Franklin, Seu post original enseja vários comentários: 1. O R usa uma linguagem orientada a vetores e matrizes, e, em geral, quando você se vê em uma situação em que está iterando valores um a um, provavelmente está fazendo algo de maneira ineficiente ou mesmo incorreta! 2. Se para iterar o que você quer está ficando "cabeludo" então é provável que você esteja fazendo de maneira inadequada, além das obs. acima! 3. No seu caso se o objetivo era apenas fazer a soma, veja (use ?sum no console do R para ver a doc. dessa função) que apenas fazendo sum(vetor, na.rm=TRUE) daria o resultado desejado por você.
sum(vetor, na.rm=TRUE) [1] 27411
Agora, considerando que seu caso o foco fosse realmente a questão com lógica booleana no R e seu uso no sum() foi mais um exemplo, então: Pela obs. nº 2 acima, veja:
ifelse(is.na(vetor), 0, vetor) [1] 575 618 558 549 499 487 450 412 382 342 365 254 311 362 312 335 339 267 300 [20] 350 527 555 561 545 597 580 548 576 624 664 632 0 539 567 574 611 660 763 [39] 658 599 577 543 514 409 364 374 361 354 454 555 620 617 559 559 0 0 544 [58] 560
HTH -- Cesar Rabak 2015-08-01 6:54 GMT-03:00 Bernardo Rangel Tura <tura@centroin.com.br>:
On 07/29/2015 02:31 PM, Franklin Januario da Silva wrote:
Boa tarde Srs.
Estou iniciando com a linguagem R e me deparei com uma situação da qual não tenho tido êxito em solucionar, preciso iterar sobre um vetor e onde houver valores NA substituí-los por 0, isso porque ao executar a função getValues da biblioteca raster sobre uma linha que contenha em algumas das células o valor NA, e tentar obter o somatório destas, o R me retorna NA, vou tentar ser mais claro:
Franklin
Se existir um NA os resultados são NA isto é uma convenção. Vários comando tem a opção na.rm que você coloca o valor TRUE ou T. Quando insto não for possível utilize na.exclude()
[]s Tura
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.
participantes (4)
-
Bernardo Rangel Tura
-
Cesar Rabak
-
Franklin Januario da Silva
-
Jobenil - Gmail