R中rollapply(调用max)结果里NA与-Inf的差异疑问
问题与解答
代码复现
> 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位的两个NA,移除NA后为空集,故max返回-Inf。
我的疑问是:rollapply结果的第一个位置为何是NA?它难道不应该也是-Inf吗?恳请解释背后的原理。
原理解释
这是由align="r"(右对齐)的窗口规则和fill=NA参数共同决定的:
- 结果第1个位置对应的右对齐窗口,需要包含当前元素(原向量第1位)和它左侧的1个元素,但原向量第1位左侧没有元素,这个窗口根本无法生成,所以直接用你指定的
fill=NA填充该位置。 - 结果第2个位置对应的窗口是原向量第1、2位,这个窗口是有效的(存在两个元素),只是两个元素都是NA,开启
na.rm=T后变成空集,触发了max函数对空集返回-Inf的规则。
内容的提问来源于stack exchange,提问作者user2338823
相关产品推荐
相关产品推荐

