2013-01-22 21 views
10

Ho creato un "assassino" di dataframe con 3 variabili. I dati sono numerici sebbene esistano valori NA in tutto.Come passare na.rm = TRUE a sapply nel calcolo della mediana?

Il mio obiettivo è calcolare la media su ciascuna delle 3 variabili.

sapply(killers, function(x) median) 

Ciò restituisce:

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

So che l'argomento na.rm è un mezzo di ignorare NA valori. Poiché na.rm = FALSE esiste in ciò che è stato restituito da R, si presume che vi sia un modo per impostarlo su TRUE all'interno della riga di codice sopra. Ho provato un paio di varianti:

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

Non sono sicuro se sono vicino o se questo sta per coinvolgere le funzioni di nidificazione, come per altro simile (anche se in ultima analisi, non è utile in questo caso che posso vedere) post sull'argomento su SO. per esempio. How to pass na.rm as argument to tapply?, Ignore NA's in sapply function

Naturalmente, ho potuto solo calcolare la media su ogni vettore che è stato utilizzato per creare assassini, ma sicuramente se quello che sto chiedendo è possibile allora che è meglio.

+3

'sapply' dice? "...: argomenti opzionali per 'FUN'." e ci sono esempi su come passare argomenti addizionali alle funzioni nella sezione * Esempi *. –

+0

@JoshuaUlrich non vuole essere così offensivo. –

+2

Hai chiesto 'sapply' di restituire la funzione' mediana' e questo è esattamente ciò che ha fatto. Le funzioni sono oggetti. (Quello che non hai fatto è stato dire di restituire 'median (x)'.) –

risposta

27

Basta fare:

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

Un'alternativa sarebbe quella (basato sul vostro codice)

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