J'ai une question concernant la transmission de plusieurs arguments à une fonction, lors de l'utilisation de lapply
dans R
.
Lorsque j'utilise lapply avec la syntaxe de lapply(input, myfun);
, cela est facilement compréhensible et je peux définir myfun comme ceci:
myfun <- function(x) {
# doing something here with x
}
lapply(input, myfun);
et les éléments de input
sont passés comme argument x
à myfun
.
Mais que se passe-t-il si je dois transmettre quelques arguments supplémentaires à myfunc
? Par exemple, il est défini comme ça:
myfun <- function(x, arg1) {
# doing something here with x and arg1
}
Comment utiliser cette fonction en passant à la fois les éléments input
(en tant qu'argument x
et un autre argument)?
Si vous consultez la page d'aide, l'un des arguments de lapply
est le mystérieux ...
. Lorsque nous examinons la section Arguments de la page d’aide, nous trouvons la ligne suivante:
...: optional arguments to ‘FUN’.
Donc, tout ce que vous avez à faire est d'inclure votre autre argument dans l'appel lapply
en tant qu'argument, comme suit:
lapply(input, myfun, arg1=6)
et lapply
, reconnaissant que arg1
_ n'est pas un argument avec lequel il sait quoi faire, le passera automatiquement à myfun
. Toutes les autres fonctions apply
peuvent faire la même chose.
n addenda: Vous pouvez utiliser ...
lorsque vous écrivez vos propres fonctions également. Par exemple, supposons que vous écriviez une fonction qui appelle plot
à un moment donné et que vous souhaitez pouvoir modifier les paramètres de tracé à partir de votre appel de fonction. Vous pouvez inclure chaque paramètre en tant qu'argument dans votre fonction, mais c'est embêtant. Au lieu de cela, vous pouvez utiliser ...
(comme argument à la fois de votre fonction et de l'appel à tracer en son sein) et que tout argument que votre fonction ne reconnaît pas soit automatiquement transmis à plot
.
Comme suggéré par Alan, la fonction 'mapply' applique une fonction à plusieurs listes multiples ou arguments de vecteur:
mapply(myfun, arg1, arg2)
Voir la page de manuel: https://stat.ethz.ch/R-manual/R-devel/library/base/html/mapply.html
Vous pouvez le faire de la manière suivante:
myfxn <- function(var1,var2,var3){
var1*var2*var3
}
lapply(1:3,myfxn,var2=2,var3=100)
et vous obtiendrez la réponse:
[[1]] [1] 200
[[2]] [1] 400
[[3]] [1] 600