2013-01-22 11 views
10

Stworzyłem ramkę danych "zabójców" z 3 zmiennymi. Dane są numeryczne, chociaż istnieją wartości NA w całym tekście.Jak przekazać na.rm = TRUE sapply przy obliczaniu mediany?

Mój cel to obliczyć średnią dla każdej z 3 zmiennych.

sapply(killers, function(x) median) 

ta zwraca:

$heartattack 
function (x, na.rm = FALSE) 
UseMethod("median") 
<bytecode: 0x103748108> 
<environment: namespace:stats> 

wiem, że na.rm argumentem jest środkiem do ignorować NA wartości. Ponieważ na.rm = FALSE istnieje w tym, co zostało zwrócone przez R, zakłada się, że istnieje sposób ustawienia tego na TRUE w linii kodu powyżej. Próbowałem kilku odmianach:

sapply(killers, na.rm=TRUE function(x) median) 
sapply(killers, function(x) median, na.rm=TRUE) 
sapply(killers, function(x) median(na.rm=TRUE)) 

Nie jestem pewien, czy jestem blisko lub jeśli to będzie obejmować funkcje gniazdowania, jak za inne podobne (choć ostatecznie nie pomocne w tym przypadku, że mogę zobaczyć) posty na temat na SO. na przykład How to pass na.rm as argument to tapply?, Ignore NA's in sapply function

Oczywiście, mogę tylko obliczyć średnią na każdego wektora, który został użyty do stworzenia zabójców, ale na pewno jeśli co pytam jest możliwe wtedy, że jest lepiej.

+3

'sapply' mówi? "...: opcjonalne argumenty do 'zabawy'." i są przykłady, jak przekazywać dodatkowe argumenty do funkcji w sekcji * Przykłady *. –

+0

@JoshuaUlrich nie był tak obraźliwy. –

+2

Poprosiłeś 'sapply', aby zwrócił funkcję 'median' i to jest dokładnie to, co zrobił. Funkcje to obiekty. (Tym, czego nie zrobiłeś, było powiedzenie, żeby zwrócił 'medianę (x)'.) –

Odpowiedz

27

Wystarczy zrobić:

sapply(killers, median, na.rm = TRUE) 

Alternatywą byłoby (oparty na kodzie)

sapply(killers, function(x) median(x, na.rm=TRUE)) 
Powiązane problemy