> library(zoo)
Attaching package: ‘zoo’
The following objects are masked from ‘package:base’:
as.Date, as.Date.numeric
> z =c(NA,NA,1,2,3)
> rollapply(z,width=2,max,fill=NA,align="r",na.rm=T)
[1] NA -Inf 1 2 3
Warning message:
In FUN(data[posns], ...) : no non-missing arguments to max; returning -Inf
>
我知道空集的最大值是-Inf。这在?max.
中提到过这就解释了为什么rollapply在秒的位置是-Inf。我认为在第二个位置,我们移除了位置1和2上的2个NA,我们留下了一个空集,因此最大值是-Inf。
我的问题是:为什么rollapply在第一个位置NA?
也不应该是-Inf吗?有人能解释一下吗?这背后的原理是什么?
如果可用点少于2点,则根本不运行max
,而是输出fill
值NA。如果需要-Inf
,则指定fill = -Inf
或交替使用partial=TRUE
,即使可用点少于2点,也会使用max
。
library(zoo)
z <- c(NA, NA, 1, 2, 3)
rollapplyr(z, 2, max, na.rm = TRUE, fill = -Inf)
## [1] -Inf -Inf 1 2 3
rollapplyr(z, 2, max, na.rm = TRUE, partial = TRUE)
## [1] -Inf -Inf 1 2 3
注意,我们可以通过将-Inf
额外传递给max
来避免max
的警告:
rollapplyr(z, 2, max, -Inf, na.rm = TRUE, fill = -Inf)
## [1] -Inf -Inf 1 2 3
我想我误解了fill参数。它替换了结果中的NA。of rollapply.
> rollapply(z,width=2,max,fill=200,align="r",na.rm=T)
[1] 200 -Inf 1 2 3
Warning message:
In FUN(data[posns], ...) : no non-missing arguments to max; returning -Inf
和不是输入中的
我认为它首先会通过填写"假想数据"来计算第一个位置的最大值。在"第0位"by NA andthen做一个max(可能是-Inf)。