Mam funkcję f(var1, var2)
w R. Załóżmy, że ustawiamy var2 = 1
i teraz chcę zastosować tę funkcję f()
do listy L
. Zasadniczo chcę uzyskać nową listę L * z wyjściami
[f(L[1],1),f(L[2],1),...,f(L[n],1)]
W jaki sposób mogę to zrobić z albo apply
, mapply
albo lapply
?
Odpowiedzi:
Po prostu przekaż var2 jako dodatkowy argument do jednej z funkcji stosujących.
To przechodzi tak samo
var2
do każdego wywołaniamyfxn
. Jeśli zamiast tego chcesz, aby każde wywołanie ofmyfxn
otrzymało 1/2/3 / itd. element obumylist
ivar2
, to jesteś wmapply
domenie.źródło
myfxn
może być wektoryzowana, w takim przypadku należy użyćmyfxn(unlist(mylist), var2=var2)
sapply(mylist, function(var1, var2) { var1*var2 }, var=thisvar2)
Alevar
zamiast govar2
. R nie potrafię odgadnąć, co masz na myśli.Jeśli twoja funkcja ma dwie zmienne wektorowe i musi obliczyć się na każdej z nich (jak wspomniał @Ari B. Friedman), możesz użyć
mapply
w następujący sposób:co daje:
źródło
mapply
będzie również poddawany recyklingowi, jeślivars1
ma pojedynczy element. Na przykład kiedyvars1 <- 3
,mapply(mult_one, vars1, vars2)
powraca30 60 90
. Jest to przydatne, gdy chcesz użyćlapply
drugiego argumentu funkcji.Aby bardziej uogólnić przykład @ Alexandra,
outer
jest istotny w przypadkach, gdy funkcja musi obliczyć się na każdej parze wartości wektorów:daje:
źródło