Qual é a diferença entre sapply e lapply em r? quando você deve usar um contra o outro? bônus: quando você deve usar o vapply?

Suponho que você já saiba o que * aplicar a função faz :-).

A principal diferença entre lapply e sapply é que o sapply tentará simplificar o máximo possível a saída do lapply. Se sua função retornar um valor único para cada elemento da lista, o sapply retornará um vetor com esses valores, por exemplo, útil quando você deseja verificar o comprimento dos elementos da lista.

Outra possibilidade é que sua função retorne vetores do mesmo tamanho para cada elemento da lista, por exemplo, funções range e quantile. Nesse caso, o sapply retornará uma matriz com número de linhas igual ao comprimento dos seus vetores e número de colunas igual ao comprimento da lista.

Caso o sapply não possa simplificar a saída, ele se comportará exatamente da mesma forma que o lapply.

Agora, a ambiguidade de sapply dos valores de retorno (às vezes uma lista, às vezes uma matriz ou um vetor) torna o desenvolvimento de pacotes um pouco mais complicado do que deveria ser. Você deve (ou pelo menos deve) verificar manualmente a classe de cada valor de retorno ao usar sapply e lançar exceções apropriadas. O Vapply resolve isso muito bem com seu argumento FUN.VALUE. Você precisa definir explicitamente qual é a sua saída (caractere, numérico, número inteiro, fator ou o que for) e o tamanho da saída.

Eu acho que você já pode imaginar quando usar o vapply: sempre que permitir que outra pessoa use suas funções, você deve abandonar o sapapply em favor do vapply :-).