Como usar funções como argumentos em r

Em R, você pode passar uma função em si como um argumento. Você pode facilmente atribuir o código completo de uma função a um novo objeto. Da mesma forma, você também pode atribuir o código de função para um argumento. Isso abre um mundo completamente novo de possibilidades. Aqui estão alguns exemplos.

Diferentes maneiras de round em R

Existem diferentes opções para arredondar números. o addPercent () usa a função volta() para isso, mas você pode querer usar uma das outras opções - por exemplo, signif (). o signif () função não volta para um número específico de decimals- em vez disso, arredondado para um número específico de dígitos. Você não pode usá-lo antes de chamar addPercent (), porque o volta() função em que a vontade do corpo estragar tudo novamente.

Claro, você poderia escrever uma segunda função especificamente para isso, mas não há necessidade de fazê-lo. Em vez disso, você pode simplesmente se adaptar addPercent () de tal forma que você simplesmente dar a função que você deseja usar como um argumento, como este:

addPercent lt; - função (x, mult = 100, FUN = rodada, ...) {cento lt; - FUN (x * mult, ...) pasta (por cento, "%", Setembro = ")}

Você adicionar um argumento para a lista - neste caso, DIVERSÃO - e, em seguida, você pode usar o nome desse argumento como uma função. Além disso, especificar um valor padrão funciona exatamente o mesmo que com outro arguments- basta especificar o valor padrão - neste caso, volta - depois de uma = placa.

Se você quiser usar signif () -se agora para arredondar os números para três dígitos, você pode facilmente fazer isso usando a seguinte chamada para addPercent ():

gt; addPercent (new.numbers, FUN = signif, dígitos = 3) [1] "82,2%" "2,49%" "162%" "40%"

o que acontece aqui?

  1. Tal como anteriormente, R tem o vetor new.numbers e multiplica por 100, porque esse é o valor padrão para mult.

  2. R atribui o código de função de signif para DIVERSÃO, então agora DIVERSÃO() é uma cópia perfeita do signif () e funciona exatamente da mesma maneira.



  3. R leva o argumento dígitos e passa-a para DIVERSÃO().

    Video: Criando funcao javascript - Argumentos de uma função

Note-se a ausência de parênteses na atribuição argumento. Se você adicionou os parênteses lá, você deve atribuir o resultado de uma chamada para signif () em vez da própria função. R interpretaria signif (), nesse caso, como uma função aninhada, e isso não é o que você quer. Além disso, R jogaria um erro porque, nesse caso, você chama signif () sem argumentos, e R não gosto disso.

Use funções anônimas

Você pode, é claro, usar qualquer função que você deseja para o DIVERSÃO argumento. Essa função não precisa mesmo de ter um nome, porque você copiar efetivamente o código. Assim, em vez de dar um nome de função, você pode simplesmente adicionar o código como um argumento como um anônimo função. Uma função anônima é uma função sem um nome.

Suponha que você tenha os lucros trimestrais da sua empresa em um vetor como este:

gt; lucros lt; - c (2100, 1430, 3580, 5230)

Seu chefe lhe pede para relatar o quanto de lucro foi feito em cada trimestre em relação ao total do ano, e, claro, você quer usar o seu novo addPercent () função. Para calcular os lucros relativos em por cento, você poderia escrever um rel.profit () funcionar como este:

Video: FUNÇÃO =SE() COM 3 ARGUMENTOS

gt; rel.profit lt; - função (x) rodada (x / soma (x) * 100)

Mas você não tem que. Em vez disso, você pode simplesmente usar o próprio corpo da função como um argumento, como no exemplo a seguir:

gt; addPercent (lucros, FUN = função (x) rodada (x / soma (x) * 100)) [1] "17%" "12%" "29%" "42%"

Naturalmente, esta não é a maneira ideal de fazer esta tarefa específica. Você poderia facilmente ter obtido o mesmo resultado com o seguinte código:

gt; addPercent (lucros / soma (lucros)) [1] "17%" "12%" "29%" "42%"

Publicações relacionadas