У меня есть функция f(var1, var2)
в R. Предположим, мы установили, var2 = 1
и теперь я хочу применить функцию f()
к списку L
. В основном я хочу получить новый список L * с выходами
[f(L[1],1),f(L[2],1),...,f(L[n],1)]
Как мне это сделать с помощью apply
, mapply
или lapply
?
Ответы:
Просто передайте var2 в качестве дополнительного аргумента одной из применяемых функций.
Это передает то же самое
var2
для каждого вызоваmyfxn
. Если вместо этого вы хотите, чтобы каждый вызовmyfxn
получал 1/2/3 / и т. Д. элемент обоихmylist
иvar2
, то вы находитесь вmapply
домене пользователя.источник
myfxn
может быть векторизовано, и в этом случае следует использоватьmyfxn(unlist(mylist), var2=var2)
sapply(mylist, function(var1, var2) { var1*var2 }, var=thisvar2)
Но я получаю сообщение об ошибке, что аргумент 2 соответствует нескольким формальным аргументамvar
вместоvar2
. R не может угадать, что вы имеете в виду.Если ваша функция имеет две векторные переменные и должна вычислять себя для каждого из них (как упомянуто @Ari B. Friedman), вы можете использовать
mapply
следующее:что дает вам:
источник
mapply
также будет перерабатывать, еслиvars1
имеет один элемент. Например , когдаvars1 <- 3
,mapply(mult_one, vars1, vars2)
возвращается30 60 90
. Это полезно, когда вы хотите использоватьlapply
второй аргумент функции.Чтобы еще больше обобщить пример @Alexander,
outer
он уместен в случаях, когда функция должна вычислять себя для каждой пары векторных значений:дает:
источник