2013-01-22 26 views
10

Tôi đã tạo một khung dữ liệu "kẻ giết người" với 3 biến. Dữ liệu là số mặc dù có giá trị NA trong suốt.Làm thế nào để vượt qua na.rm = TRUE để thuận lợi khi tính trung bình?

Mục tiêu của tôi là tính giá trị trung bình trên từng biến trong số 3 biến.

sapply(killers, function(x) median) 

này trả về:

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

Tôi biết rằng đối số na.rm là một phương tiện để bỏ qua NA giá trị. Kể từ khi na.rm = FALSE tồn tại trong những gì đã được trả về bởi R, một giả định rằng có một cách để thiết lập này để TRUE trong dòng mã ở trên. Tôi đã thử một vài biến thể:

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

Tôi không chắc chắn nếu tôi gần hoặc nếu điều này sẽ liên quan đến chức năng làm tổ, theo khác tương tự (mặc dù cuối cùng không hữu ích trong trường hợp này tôi có thể nhìn thấy) bài viết về chủ đề trên SO. ví dụ. How to pass na.rm as argument to tapply?, Ignore NA's in sapply function

Tất nhiên, tôi chỉ có thể tính toán giá trị trung bình trên mỗi vector đã được sử dụng để tạo ra những kẻ giết người, nhưng chắc chắn nếu những gì tôi đang hỏi là có thể thì đó là tốt hơn.

+3

'sapply' nói? "...: đối số tùy chọn để 'vui vẻ'." và có các ví dụ về cách chuyển các đối số bổ sung cho các hàm trong phần * Examples *. –

+0

@JoshuaUlrich không có nghĩa là gây khó chịu. –

+2

Bạn đã yêu cầu 'sapply' trả lại hàm' median' và đó chính xác là những gì nó đã làm. Các hàm là các đối tượng. (Những gì bạn không làm là yêu cầu nó trả về 'trung bình (x)'.) –

Trả lời

27

Chỉ cần làm:

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

Một thay thế sẽ được (dựa trên mã của bạn)

sapply(killers, function(x) median(x, na.rm=TRUE)) 
Các vấn đề liên quan