<div>Benilton,</div><div>pelo pouco que entendo de R esta sua idéia de "system.time(x[<a href="http://is.na/" target="_blank">is.na</a>(x)] <- .1)" tem cara de ser muito mais rápida e eficiente em termos de memória que as duas anteriores, pois assim como a opção 1, só faz algo onde realmente interessa. </div>
<div> </div><div>a 1ª opção seria quase tão rápida quanto, mas faz uma comparação a mais ao comparar o "<a href="http://is.na">is.na</a>(x)" com "1"</div><div> </div><div>Quando ligar meu notebook eu vou testar as 3 opções pra ter certeza<br clear="all">
lmassis <at> yahoo <dot> com <dot> br<br>assis.leonard <at> gmail <dot> com<br>
<br><br></div><div class="gmail_quote">2011/8/11 Benilton Carvalho <span dir="ltr"><<a href="mailto:beniltoncarvalho@gmail.com">beniltoncarvalho@gmail.com</a>></span><br><blockquote style="margin: 0px 0px 0px 0.8ex; padding-left: 1ex; border-left-color: rgb(204, 204, 204); border-left-width: 1px; border-left-style: solid;" class="gmail_quote">
Compare ainda com:<br>
<br>
system.time(x[<a href="http://is.na" target="_blank">is.na</a>(x)] <- .1)<br>
<br>
Na sua opcao 1, vc:<br>
a) Cria uma matriz logica marcando NAs;<br>
b) Converte a matriz logica (4 bytes cada elemento) para uma matriz<br>
numerica (8 bytes cada elemento)<br>
c) Cria uma segunda matriz logica comparando a matriz em (b) com 1;<br>
d) Usa os indices de (c) para fazer a substituicao<br>
<br>
Na opcao 2, vc:<br>
a) Cria uma matriz logica marcando NAs (esse e' o <a href="http://is.na" target="_blank">is.na</a>); (mat1)<br>
b) Checa (internamente no ifelse) se cada um desses elementos de (a)<br>
e' um NA e guarda esse resultado (mat2)<br>
c) Faz uma copia de (a) (mat3)<br>
d) Cria uma matriz com a negacao de (b) (mat4)<br>
e) Cria um vetor q eh o subconjunto de mat3 usando os indices de mat4<br>
(chame essa de mat5)<br>
f) Apaga mat3 e mat4<br>
g) Testa se algum elemento de (e) e' verdadeiro<br>
- se sim:<br>
g1) cria novamente a matriz de negacao de (b) (agora ela e' mat6)<br>
g2) gera a combinacao de mat6 com mat1 (chame a combinacao de mat7);<br>
g3) apaga mat6;<br>
g4) cria uma copia de mat1 (chame de mat8);<br>
g5) cria um vetor com o comprimento do numero de verdadeiros de mat7;<br>
g6) substitui em mat8 as posicoes indicadas por mat7 pelo vetor criado em g5;<br>
g7) apaga mat1<br>
g8) renomeia mat8 para mat1;<br>
h) repete todo o G para os falsos, substiuindo pelo valor alternativo<br>
(q e' x, no seu caso)<br>
i) substitui os faltantes (nao inclusos em G ou H) por NA<br>
j) retorna o resultado final<br>
<div><div></div><div class="h5"><br>
b<br>
_______________________________________________<br>
R-br mailing list<br>
<a href="mailto:R-br@listas.c3sl.ufpr.br">R-br@listas.c3sl.ufpr.br</a><br>
<a href="https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br" target="_blank">https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br</a><br>
Leia o guia de postagem (<a href="http://www.leg.ufpr.br/r-br-guia" target="_blank">http://www.leg.ufpr.br/r-br-guia</a>) e forneça código mínimo reproduzível.<br>
</div></div></blockquote></div><br>