You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 08:01:28