Tengo una pregunta sobre cómo pasar múltiples argumentos a una función, cuando uso lapply
in R
.
Cuando uso lapply con la sintaxis de lapply(input, myfun);
, esto es fácilmente comprensible y puedo definir myfun así:
myfun <- function(x) {
# doing something here with x
}
lapply(input, myfun);
y los elementos de input
se pasan como x
argumento a myfun
.
Pero, ¿y si necesito pasar algunos argumentos más myfunc
? Por ejemplo, se define así:
myfun <- function(x, arg1) {
# doing something here with x and arg1
}
¿Cómo puedo usar esta función pasando ambos input
elementos (como x
argumento) y algún otro argumento?
Respuestas:
Si busca la página de ayuda, uno de los argumentos
lapply
es el misterio...
. Cuando miramos la sección Argumentos de la página de ayuda, encontramos la siguiente línea:Entonces, todo lo que tiene que hacer es incluir su otro argumento en la
lapply
llamada como un argumento, así:y
lapply
, reconociendo quearg1
no es un argumento con el que sabe qué hacer, lo pasará automáticamentemyfun
. Todas las demásapply
funciones pueden hacer lo mismo.Un apéndice: también puede usarlo
...
cuando esté escribiendo sus propias funciones. Por ejemplo, digamos que escribe una función que llamaplot
en algún momento y desea poder cambiar los parámetros del gráfico desde su llamada a la función. Puede incluir cada parámetro como un argumento en su función, pero eso es molesto. En su lugar, puede usar...
(como un argumento tanto para su función como para la llamada a trazar dentro de ella), y hacer que cualquier argumento que su función no reconozca se transfiera automáticamenteplot
.fuente
Como sugirió Alan, la función 'mapply' aplica una función a múltiples listas múltiples o argumentos vectoriales:
Consulte la página del manual: https://stat.ethz.ch/R-manual/R-devel/library/base/html/mapply.html
fuente
outer
en la misma línea, que aplica una función a cada par de valores en dos argumentos vectoriales. Página de manualPuedes hacerlo de la siguiente manera:
y obtendrás la respuesta:
[[1]] [1] 200
[[2]] [1] 400
[[3]] [1] 600
fuente
x
es un vector o una lista ymyfun
enlapply(x, myfun)
se llama para cada elemento dex
separado.Opción 1
Si desea usar entero
arg1
en cadamyfun
llamada (myfun(x[1], arg1)
,myfun(x[2], arg1)
etc.), uselapply(x, myfun, arg1)
(como se indicó anteriormente).opcion 2
Sin embargo, si desea llamar
myfun
a cada elemento de porarg1
separado junto con elementos dex
(myfun(x[1], arg1[1])
,myfun(x[2], arg1[2])
etc.), no es posible usarlapply
. En su lugar, usemapply(myfun, x, arg1)
(como se indicó anteriormente) oapply
:o
fuente