2013-01-20 9 views
52

(musi to być bardzo podstawowe pytanie, ale do tej pory nie udało mi się znaleźć odpowiedzi w podręcznikach R ...)przechodząc kilka argumentów do zabawy lapply (i inni * zastosowanie)

podczas korzystania z lapply Składnia lapply(input, myfun); - to jest łatwo zrozumiałe, można zdefiniować myfun tak:

myfun <- function(x) { 
# doing something here with x 
} 

lapply(input, myfun); 

oraz elementy input są przekazywane jako x argument myfun.

Ale co, jeśli muszę przekazać więcej argumentów do myfunc? Na przykład, jest zdefiniowane tak:

myfun <- function(x, arg1) { 
# doing something here with x and arg1 
} 

jaki sposób mogę korzystać z tej funkcji, przechodząc zarówno input elementy (jak x argument) i niektóre inne argumentu?

Z góry dziękuję!

+0

Terminatory konsoli R linie wejściowe z " ; " to znak, że prawdopodobnie używałeś kiedyś języka przetwarzania makr. Argument potrójnej kropki jest opisany w podrozdziale 4 sekcji "Pisanie własnych funkcji" dokumentu "wprowadzenie do R", prawdopodobnie pierwszy "podręcznik", który powinieneś przeczytać. –

Odpowiedz

63

Jeśli przejrzysz stronę pomocy, jednym z argumentów do lapply jest tajemniczy .... Kiedy patrzymy na odcinku Argumenty strony pomocy, znajdujemy następujący wiersz:

...: optional arguments to ‘FUN’. 

Więc wszystko co musisz zrobić, to podać swój drugi argument w wywołaniu lapply jako argument, tak jak poniżej:

lapply(input, myfun, arg1=6) 

i lapply, uznając, że arg1 nie jest argumentem, który wie, co zrobić, automatycznie przekaże go do myfun. Wszystkie inne funkcje apply mogą zrobić to samo.

Dodatek: Możesz również używać ... podczas pisania własnych funkcji. Na przykład powiedzmy, że napisałeś funkcję, która w pewnym momencie wywołuje plot i chcesz mieć możliwość zmiany parametrów wykresu z wywołania funkcji. Możesz uwzględnić każdy parametr jako argument w swojej funkcji, ale to denerwujące. Zamiast tego możesz użyć ... (jako argumentu do swojej funkcji i wywołania do plotowania w nim) i mieć argument, że twoja funkcja nie rozpoznaje, automatycznie przekazuje się do plot.

+0

Co jeśli drugi argument, np. "Arg1", jest listą pasującą do listy "wejściowych"? Kiedy próbuję _lapply (input, myfun, arg1 = input2) _ gdzie input2 jest listą, wygląda na to, że lapply przesyła całą listę naraz zamiast elementu po elemencie jak przy 'input'. – Alan

+5

Właśnie znalazłem odpowiedź w innym poście, który działa: mapply (myfun, df $ input, df $ input2) – Alan

4

Można to zrobić w następujący sposób:

myfxn <- function(var1,var2,var3){ 
     var1*var2*var3 

    } 

    lapply(1:3,myfxn,var2=2,var3=100) 

a otrzymasz odpowiedź:

[[1]] [1] 200

[[2]] [1] 400

[[3]] [1] 600

+1

dzięki, ale ta odpowiedź jest już podana powyżej –

Powiązane problemy