[R-br] Funcionamento (implementação) da função apply (lapply) em loops

Fernando Henrique Toledo fernandohtoledo em gmail.com
Terça Junho 14 08:19:18 BRT 2011


Júnior, para ver o código fonte da função lapply, ou se quiser aprofundar-se
na apply entre no CRAN baixe o código fonte (extensão .tar.gz) e vá no
diretório: /R-2.13.0/src/library/bae/R/. Lá estarão todos arquivos .R das
funções do base! Vale lembrar que algumas delas tem partes ou o todo
implementadas em outras linguagens, segue o exemplo do lapply:

lapply <- function (X, FUN, ...)
{
    FUN <- match.fun(FUN)
    ## internal code handles all vector types, including expressions
    ## However, it would be OK to have attributes which is.vector
    ## disallows.
    if(!is.vector(X) || is.object(X)) X <- as.list(X)
    .Internal(lapply(X, FUN))
}

rapply <-
    function(object, f, classes = "ANY", deflt = NULL,
             how = c("unlist", "replace", "list"), ...)
{
    if(typeof(object) != "list")
        stop("'object' must be a list")
    how <- match.arg(how)
    res <- .Internal(rapply(object, f, classes, deflt, how))
    if(how == "unlist") unlist(res, recursive = TRUE) else res
}


abraço,
FH

2011/6/13 Junior Beleti <beleti.junior em gmail.com>

> Boa noite,
>
> gostaria de entender o funcionamento da função apply, mais precisamente
> lapply, para loops.
>
> Já conheço a descrição de seu funcionamento:
>
> ‘lapply’ returns a list of the same length as ‘X’, each element of which is
> the result of applying ‘FUN’ to the corresponding element of ‘X’.
>
>
> Mas o que eu gostaria de saber é como ele funciona em sua essência. Por
> exemplo, utilizar um lapply ao invés de um loop "for" é mais rápido.
> Eu gostaria de saber o porque, ou seja, como o lapply é implementado.
>
> Não sei se fui claro, mas gostaria de encontrar a implementação da função
> lapply, o que não encontrei no diretório do pacote "base".
>
> Se alguém puder ajudar.
>
> Também peço desculpas por não ter dado grandes contribuições para a lista,
> mas creio ter mais experiência em programação (lógica) de fato, do que no
> ambiente R.
>
> Obrigado.
>
> --
> Carlos Roberto Beleti Junior
> Mestrado em Ciência da Computação
> Departamento de Informática
> Universidade Estadual de Maringá
>
>
> _______________________________________________
> R-br mailing list
> R-br em 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.
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20110614/b400115c/attachment.html>


Mais detalhes sobre a lista de discussão R-br