
Compare ainda com: system.time(x[is.na(x)] <- .1) Na sua opcao 1, vc: a) Cria uma matriz logica marcando NAs; b) Converte a matriz logica (4 bytes cada elemento) para uma matriz numerica (8 bytes cada elemento) c) Cria uma segunda matriz logica comparando a matriz em (b) com 1; d) Usa os indices de (c) para fazer a substituicao Na opcao 2, vc: a) Cria uma matriz logica marcando NAs (esse e' o is.na); (mat1) b) Checa (internamente no ifelse) se cada um desses elementos de (a) e' um NA e guarda esse resultado (mat2) c) Faz uma copia de (a) (mat3) d) Cria uma matriz com a negacao de (b) (mat4) e) Cria um vetor q eh o subconjunto de mat3 usando os indices de mat4 (chame essa de mat5) f) Apaga mat3 e mat4 g) Testa se algum elemento de (e) e' verdadeiro - se sim: g1) cria novamente a matriz de negacao de (b) (agora ela e' mat6) g2) gera a combinacao de mat6 com mat1 (chame a combinacao de mat7); g3) apaga mat6; g4) cria uma copia de mat1 (chame de mat8); g5) cria um vetor com o comprimento do numero de verdadeiros de mat7; g6) substitui em mat8 as posicoes indicadas por mat7 pelo vetor criado em g5; g7) apaga mat1 g8) renomeia mat8 para mat1; h) repete todo o G para os falsos, substiuindo pelo valor alternativo (q e' x, no seu caso) i) substitui os faltantes (nao inclusos em G ou H) por NA j) retorna o resultado final b