[R] rollapply() produces NAs

Sepp sepp9000 at yahoo.de
Sun May 28 17:57:03 CEST 2017

This is the function in plain text because it looked messy before:

VaRfun <- function(x, lambda = 0.94) {

#create data.frame and order returns such that the lates return is the first
  df <- data.frame(weight = c(1:length(x)), return = rev(x))
  K <- nrow(df)
  constant <- (1-lambda)/(1-lambda^(K))
#assign weights to the returns  
  for(i in 1:nrow(df)) {
    df$weight[i] <- lambda^(i-1) * constant
#order returns in an ascending order
  df <- df[order(df$return),]

#add the cumulative sum of the weights
  df$cum.weight <- cumsum(df$weight)

#calculate value at risk
  VaR <- -tail((df$return[df$cum.weight <= .05]), 1)
  signif(VaR, digits = 3)

It works for a single vector of returns but if I try to use it with rollapply(), such as

rollapply(r, width = list(-500, -1), FUN = VaRfun),

it outputs a vector of NAs and I don't know why.

R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

More information about the R-help mailing list