splinefun中的错误(x [!na],y [!na],...):零非NA点

时间:2014-10-24 18:28:32

标签: r matrix spline

help(spline)help(na.spline)无法帮助我理解为什么我会收到此错误,并且网上没有任何内容可以直接解决此问题。

我有一个我用这两个命令生成的矩阵:

RatioTable <- ddply(Key, c('Name', 'Position'), function(x) c(AvgRatio = mean(x$RatioMeanBid)))
RatioMatrix <- daply(RatioTable, .(Name, Position), function(x) x$AvgRatio)

> RatioMatrix
             Position
     Name     1    2    3    4    5
      a      0.4  0.3  0.2  0.2   NA
      b      0.6  0.7   NA   NA  0.5
      c       NA  0.7   NA   NA   NA
      d      0.5  0.4  0.3  0.3  0.2
      e       NA   NA   NA   NA   NA

> str(RatioMatrix)
 num [1:5, 1:5] 0.4 0.6 NA 0.5 NA ...
 - attr(*, "dimnames")=List of 2
  ..$ Name      : chr [1:8305] "a" "b" "c" "d" ...
  ..$ Position: chr [1:10] "1" "2" "3" "4" ...

如果我然后在RatioMatrix上执行以下插值样条命令,则它可以工作:

d0 <- as.Date("2000-01-01")

RatioMatrix2 <- exp(na.spline(zoo(t(log(RatioMatrix)), d0 + seq_len(ncol(RatioMatrix))), 
                                method = "natural", na.rm = FALSE))

但是,如果我对RatioMatrix进行任何更改或添加,例如截断或调整第1列中的值(使它们大于第2列中的值),则插值样条线命令会抛出错误:

RatioMatrix <- daply(RatioTable, .(Name, Position), function(x) x$AvgRatio)

Pos1Greater <- data.frame(RatioMatrix[,1] >= RatioMatrix[,2])
Pos2Greater <- data.frame(RatioMatrix[,1] < RatioMatrix[,2])

Adj=(Pos1Greater*RatioMatrix[,1]) + (Pos2Greater*(RatioMatrix[,2]+0.05))
RatioMatrix[,1] = t(Adj)

d0 <- as.Date("2000-01-01")

RatioMatrix2 <- exp(na.spline(zoo(t(log(RatioMatrix)), d0 + seq_len(ncol(RatioMatrix))), 
                                method = "natural", na.rm = FALSE))

Error in splinefun(x[!na], y[!na], ...) : zero non-NA points

我按照建议尝试调试(splinefun),但仍然没有看到NA来自哪里。有任何想法吗? 感谢您对此进行调查。

0 个答案:

没有答案