2015-12-23 4 views
1

У меня есть вопрос относительно функции Reduce. Например, у меня есть список, в котором один из элементов имеет номер NA.R: Уменьшить функцию. Na

a<-list(c(1,2),c(2,2),c(1,NA)) 

Я хотел бы использовать функцию Reduce сделать в среднем элементов списка.

что (1+2+1)/3=1.33 и (2+2+NA)/3 = NA Но в этом последнем случае, то, что я на самом деле нужно, чтобы избежать необходимости в НС, так что результат должен быть (2+2)/2 = 2 поэтому конечный результат является вектором 1.33, 2

Я использую Reduce("+", a)/length(a), но я получаю NA из-за элемента NA.

Заранее спасибо

+1

Если вы хотите использовать 'Reduce' try:' Reduce ("+", lapply (a, function (x) replace (x, is.na (x), 0)))/Reduce ("+" , lapply (a, Negate (is.na))) ' –

ответ

7

Я бы не использовать Reduce для этого. Это всего лишь скрытая петля for. Вот лучшая альтернатива:

rowMeans(do.call(cbind, a), na.rm = TRUE) 
#[1] 1.333333 2.000000 

Это комбинирует свои векторы в матрицу и вычисляется в строке означает, используя функцию rowMeans, которая может удалить NA значения.

+0

вне графика ответ !! :) Спасибо вам! – donpresente

Смежные вопросы