Tengo una función f(var1, var2)
en R. Supongamos que establecemos var2 = 1
y ahora quiero aplicar la función f()
a la lista L
. Básicamente quiero obtener una nueva lista L * con las salidas
[f(L[1],1),f(L[2],1),...,f(L[n],1)]
¿Cómo puedo hacer esto con cualquiera apply
, mapply
o lapply
?
Respuestas:
Simplemente pase var2 como argumento adicional a una de las funciones de aplicación.
Esto pasa lo mismo
var2
a cada llamada demyfxn
. Si, por el contrario, desea que cada llamadamyfxn
obtenga el 1 ° / 2 ° / 3 ° / etc. elemento de ambosmylist
yvar2
, entonces, estás enmapply
el dominio de.fuente
myfxn
puede estar vectorizado, en cuyo caso se debe usarmyfxn(unlist(mylist), var2=var2)
sapply(mylist, function(var1, var2) { var1*var2 }, var=thisvar2)
Pero me da un error de que el argumento 2 coincide con múltiples argumentos formalesvar
lugar devar2
. R no puede adivinar lo que quieres decir.Si su función tiene dos variables vectoriales y debe computarse a sí misma en cada valor de ellas (como lo menciona @Ari B. Friedman), puede usar
mapply
lo siguiente:que te da:
fuente
mapply
también se reciclará sivars1
tiene un solo elemento. Por ejemplo cuandovars1 <- 3
,mapply(mult_one, vars1, vars2)
vuelve30 60 90
. Esto es útil cuando desea usarlapply
sobre el segundo argumento de una función.Para generalizar aún más el ejemplo de @ Alexander,
outer
es relevante en los casos en que una función debe calcularse a sí misma en cada par de valores vectoriales:da:
fuente