Tengo una pregunta sobre cómo pasar múltiples argumentos a una función, cuando uso lapplyin 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 inputse pasan como xargumento 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 inputelementos (como xargumento) y algún otro argumento?

Respuestas:
Si busca la página de ayuda, uno de los argumentos
lapplyes 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
lapplyllamada como un argumento, así:y
lapply, reconociendo quearg1no es un argumento con el que sabe qué hacer, lo pasará automáticamentemyfun. Todas las demásapplyfunciones 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 llamaploten 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
outeren 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
xes un vector o una lista ymyfunenlapply(x, myfun)se llama para cada elemento dexseparado.Opción 1
Si desea usar entero
arg1en cadamyfunllamada (myfun(x[1], arg1),myfun(x[2], arg1)etc.), uselapply(x, myfun, arg1)(como se indicó anteriormente).opcion 2
Sin embargo, si desea llamar
myfuna cada elemento de porarg1separado 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