J'ai une fonction f(var1, var2)
dans R. Supposons que nous ayons défini var2 = 1
et maintenant je veux appliquer la fonction f()
à la listeL
. Fondamentalement, je veux obtenir une nouvelle liste L * avec les sorties
[f(L[1],1),f(L[2],1),...,f(L[n],1)]
Comment puis-je faire cela avec apply
, mapply
ou lapply
?
Réponses:
Passez simplement var2 comme argument supplémentaire à l'une des fonctions apply.
Cela passe la même chose
var2
à chaque appel demyfxn
. Si à la place vous voulez que chaque appel demyfxn
pour obtenir le 1er / 2ème / 3ème / etc. élément des deuxmylist
etvar2
, alors vous êtes dansmapply
le domaine de.la source
myfxn
peut être vectorisé, auquel cas il faut utilisermyfxn(unlist(mylist), var2=var2)
sapply(mylist, function(var1, var2) { var1*var2 }, var=thisvar2)
mais j'obtiens une erreur indiquant que l'argument 2 correspond à plusieurs arguments formelsvar
placevar2
. R ne peut pas deviner ce que tu veux dire.Si votre fonction a deux variables vectorielles et doit se calculer elle-même sur chacune de leurs valeurs (comme mentionné par @Ari B.Friedman), vous pouvez utiliser
mapply
comme suit:ce qui vous donne:
la source
mapply
recyclera également s'ilvars1
a un seul élément. Par exemple, quandvars1 <- 3
,mapply(mult_one, vars1, vars2)
retourne30 60 90
. Ceci est utile lorsque vous souhaitez utiliserlapply
sur le deuxième argument d'une fonction.Pour généraliser davantage l'exemple de @ Alexander,
outer
est pertinent dans les cas où une fonction doit se calculer sur chaque paire de valeurs vectorielles:donne:
la source