我有一些数据,其中大部分是NA
。
为简单起见,我们说它看起来像这样:
x = c(NA, 3, 4, 3.5, NA, NA, NA, NA, 7, 5)
bins = c(1, 1, 1, 2, 2, 2, 3, 3, 4, 4)
我使用ave( )
和which.min( )
来获取每个bin类型的最小值:
ave(x, segments, FUN = which.min)
但我收到错误:
Error in `split<-.default`(`*tmp*`, g, value = lapply(split(x, g), FUN)) :
replacement has length zero
这种情况发生的原因(我认为)是因为bin#3只有NA
个值。纠正后,错误消失。我可以使用像这样的函数:
ave(x, segments, FUN = function(xx){
if(all(is.na(xx))){
return(NA)
} else {
xx = which.min(xx)
return(xx)
}}
)
可是:
1)这就像哈克一样。和
2)which.min(c(NA, NA, NA))
不会导致错误,ave(c(NA, NA, NA), c(1, 1, 1), FUN=mean)
也不会出错 - 那么我发现了什么?
- &GT;任何人都知道为什么会出现这种错误/最好的解决方法?
干杯。