Cómo utilizar funciones como argumentos en r
En R, puede pasar una función como un argumento. Puede asignar fácilmente el código completo de una función a un nuevo objeto. Del mismo modo, también se puede asignar el código de función a un argumento. Esto abre un nuevo mundo completo de posibilidades. Aquí están algunos ejemplos.
Diferentes maneras de redondear en I
Hay diferentes opciones para redondear números. los addPercent () usos de función redondo() por eso, pero es posible que desee utilizar una de las otras opciones - por ejemplo, signif (). los signif () función no redonda para un número específico de decimals- en su lugar, se redondea a un número determinado de dígitos. No se puede utilizar antes de llamar addPercent (), porque el redondo() función en que la voluntad del cuerpo lío todo de nuevo.
Por supuesto, se podría escribir una segunda función específicamente para eso, pero no hay necesidad de hacerlo. En su lugar, usted puede adaptar addPercent () de tal manera que simplemente da la función que desea utilizar como argumento, como esto:
addPercent lt; - la función (x, mult = 100, FUN = redonda, ...) {ciento lt; - FUN (x * mult ...) pasta (por ciento "%", septiembre = "")}
Se agrega un argumento a la lista - en este caso, DIVERTIDO - y entonces usted puede utilizar el nombre de ese argumento como una función. Además, la especificación de un valor por defecto funciona exactamente igual que con otros arguments- simplemente especificar el valor por defecto - en este caso, redondo - después de una = firmar.
Si desea utilizar signif () ahora para redondear los números de tres dígitos, puede hacerlo fácilmente utilizando la siguiente llamada a addPercent ():
> AddPercent (new.numbers, FUN = signif, dígitos = 3) [1] "82,2%" "2,49%" "162%" "40%"
¿Qué pasa aquí?
Al igual que antes, R toma el vector new.numbers y lo multiplica por 100, porque ese es el valor predeterminado para mult.
R asigna el código de función de signif a DIVERTIDO, y ahora DIVERTIDO() es una copia perfecta de signif () y funciona exactamente de la misma manera.
R toma el argumento dígitos y lo pasa a DIVERTIDO().
Nótese la ausencia de paréntesis en la asignación argumento. Si ha agregado el paréntesis allí, que le asigne el resultado de una llamada al signif () en lugar de la propia función. R interpretaría signif (), en ese caso, como una función anidada, y eso no es lo que quieres. Además, R lanzaría un error porque, en ese caso, se llama a signif () sin argumentos, y R no le gusta eso.
Utilice funciones anónimas
Puede, por supuesto, utilizar cualquier función que desea para el DIVERTIDO argumento. Esa función ni siquiera necesita tener un nombre, porque se copia eficazmente el código. Así, en lugar de dar un nombre de función, usted puede añadir el código como un argumento como anónimo función. Una función anónima es una función sin nombre.
Suponga que tiene los beneficios trimestrales de su empresa en un vector de esta manera:
> Utilidades lt; - c (2100, 1430, 3580, 5230)
Su jefe le pide que informe la cantidad de beneficios se hizo en cada trimestre en relación con el total del año, y, por supuesto, usted desea utilizar su nueva addPercent () función. Para calcular las ganancias relativas en porcentaje, se podría escribir un rel.profit () funcionar como esto:
> Rel.profit lt; - la función (x) y vuelta (x / sum (x) * 100)
Pero usted no tiene que hacerlo. En su lugar, sólo puede utilizar el cuerpo de la función como un argumento, como en el siguiente ejemplo:
> AddPercent (beneficios, FUN = function (x) y vuelta (x / sum (x) * 100)) [1] "17%" "12%" "29%" "42%"
Por supuesto, esta no es la manera óptima de hacer esta tarea específica. Desde aquí se puede haber conseguido el mismo resultado con el siguiente código:
> AddPercent (ganancias / sum (beneficios)) [1] "17%" "12%" "29%" "42%"