Search code examples
rzoorollapply

NA and -Inf in the result of rollapply(which uses max) in R


> 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
> 

I do understand that the max of an empty set is -Inf. This is mentioned in ?max.

That explains why the rollapply at the second position is -Inf. I think that at the second position, we remove the 2 NA's on position 1 and 2, and we are left with an empty set and hence the max is -Inf.

My query is : Why is the rollapply at the first position NA?

Should it also not be -Inf? Can someone please explain? What is the rationale behind it ?


Solution

  • If there are fewer than 2 points available then it does not run max at all but rather outputs the fill value which is NA. If -Inf were wanted then specify fill = -Inf or alternately use partial=TRUE which will use max even if there are less than 2 points available.

    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
    

    Note that we can avoid the warnings from max by additionally passing -Inf to max:

    rollapplyr(z, 2, max, -Inf, na.rm = TRUE, fill = -Inf)
    ## [1] -Inf -Inf    1    2    3