Cómo utilizar las funciones como argumentos en R

December 20

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í hay algunos ejemplos.

Diferentes maneras de redondear en R

Hay diferentes opciones para redondear números. La función addPercent () utiliza round () para eso, pero es posible que desee utilizar una de las otras opciones - por ejemplo, signif (). La función Signif () no hace ronda a un número específico de decimales; En su lugar, se redondea a un número determinado de dígitos. No se puede utilizar antes de llamar addPercent (), ya que la función round () 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 <- función (x, mult = 100, FUN = redondo, ...) {
ciento <- FUN (x * mult, ...)
pasta (por ciento "%", septiembre = "")
}

Para agregar un argumento a la lista - en este caso, DIVERSIÓN - y entonces usted puede utilizar el nombre de ese argumento como una función. Además, la especificación de un valor predeterminado funciona exactamente el mismo que con otros argumentos; sólo tiene que especificar el valor por defecto - en este caso, redondo - después de un signo =.

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í?

  1. Al igual que antes, R toma las new.numbers vectoriales y lo multiplica por 100, porque ese es el valor predeterminado para mult.
  2. R asigna el código de función de signif a FUN, por lo que ahora FUN () es una copia perfecta de signif () y funciona exactamente de la misma manera.
  3. R toma los dígitos de argumentos y se lo pasa a FUN ().

Nótese la ausencia de paréntesis en la asignación argumento. Si ha agregado el paréntesis allí, debe asignar el resultado de una llamada a 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 desee para el argumento DIVERSIÓN. 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, puede simplemente añadir el código como un argumento como una función anónima. 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 <- c (2100, 1430, 3580, 5230)

Su jefe le pide que reporta 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 una función rel.profit () así:

> Rel.profit <- 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. Usted podría fácilmente haber conseguido el mismo resultado con el siguiente código:

> addPercent (ganancias / sum (beneficios))
[1] "17%" "12%" "29%" "42%"