R: Reduce函数。NA处理

3

我有一个关于Reduce函数的问题。 例如,我有一个列表,其中一个元素为NA

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

我希望使用Reduce函数对列表中的元素进行平均值计算。

也就是说,(1+2+1)/3=1.33(2+2+NA)/3 = NA。但是在最后一种情况下,我需要避免出现NA,所以结果应该是(2+2)/2 = 2,因此最终的结果是向量1.33, 2

我正在使用Reduce("+", a)/length(a),但由于有NA元素,我得到了一个NA

提前感谢您的帮助。


2
如果您确实想使用 Reduce,请尝试:Reduce("+", lapply(a, function(x) replace(x, is.na(x), 0))) / Reduce("+", lapply(a, Negate(is.na))) - G. Grothendieck
1个回答

11

我不会在这种情况下使用Reduce。它只是一个隐藏的for循环而已。以下是更好的替代方案:

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

这将您的向量合并成一个矩阵,并使用rowMeans函数计算行均值,该函数可以删除NA值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接