Eu tenho uma função f(var1, var2)
em R. Suponha que definimos var2 = 1
e agora quero aplicar a função f()
à lista L
. Basicamente, quero obter uma nova lista L * com as saídas
[f(L[1],1),f(L[2],1),...,f(L[n],1)]
Como posso fazer isso com qualquer um apply
, mapply
ou lapply
?
Respostas:
Apenas passe var2 como um argumento extra para uma das funções de aplicação.
Isso passa o mesmo
var2
para todas as chamadas demyfxn
. Se você deseja que cada chamadamyfxn
receba o 1º / 2º / 3º / etc. elemento de ambosmylist
evar2
, então você está nomapply
domínio de.fonte
myfxn
pode ser vectorized, caso em que deve-se usarmyfxn(unlist(mylist), var2=var2)
sapply(mylist, function(var1, var2) { var1*var2 }, var=thisvar2)
Mas eu recebo um erro de que o argumento 2 corresponde a vários argumentos formaisvar
vez devar2
. R não pode adivinhar o que você quer dizer.Se sua função possui duas variáveis vetoriais e deve se calcular em cada valor delas (conforme mencionado por @Ari B. Friedman), você pode usar
mapply
o seguinte:o que lhe dá:
fonte
mapply
também reciclará sevars1
tiver um único elemento. Por exemplovars1 <- 3
, quando ,mapply(mult_one, vars1, vars2)
retorna30 60 90
. Isso é útil quando você deseja usarlapply
sobre o segundo argumento de uma função.Para generalizar ainda mais o exemplo de @ Alexander,
outer
é relevante nos casos em que uma função deve se calcular em cada par de valores vetoriais:dá:
fonte