Como utilizar as 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 rodada 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 rodada 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 deseja usar como um argumento, como este:

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

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

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

> 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-lo 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 toma o argumento dígitos e passa para DIVERSÃ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 de sua empresa em um vetor como este:

> 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:

> rel.profit lt; - função (x) round (x / sum (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:

> AddPercent (lucros, FUN = function (x) round (x / sum (x) * 100)) [1] "17%" "12%" "29%" "42%"

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

> AddPercent (lucros / soma (lucros)) [1] "17%" "12%" "29%" "42%"

menu