使用which.min()和ave()时出错

时间:2015-04-10 23:52:37

标签: r

我有一些数据,其中大部分是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;任何人都知道为什么会出现这种错误/最好的解决方法?

干杯。

0 个答案:

没有答案