Problemas al agregar un mes a X usando POSIXlt en R - es necesario restablecer el valor usando as.Fecha (X)

Esto funciona para mí en R:

# Setting up the first inner while-loop controller, the start of the next water year
  NextH2OYear <- as.POSIXlt(firstDate)
  NextH2OYear$year <- NextH2OYear$year + 1
  NextH2OYear<-as.Date(NextH2OYear)

Pero esto no lo hace:

# Setting up the first inner while-loop controller, the start of the next water month
  NextH2OMonth <- as.POSIXlt(firstDate)
  NextH2OMonth$mon <- NextH2OMonth$mon + 1
  NextH2OMonth <- as.Date(NextH2OMonth)

Me sale este error:

Error en as.Date.POSIXlt (NextH2OMonth): componente de longitud cero en una estructura POSIXlt no vacía

¿Alguna idea de por qué? Necesito agregar sistemáticamente un año (para un ciclo) y un mes (para otro ciclo) y estoy comparando las variables cambiadas resultantes con los valores con una clase de Fecha, por lo que se vuelven a convertir utilizando as.Date ().

Gracias tom

Editar:

A continuación se muestra toda la sección de código. Estoy usando RStudio (versión 0.97.306). El código a continuación representa una función a la que se le pasa una matriz de dos columnas (Fecha (CLass = Fecha) y Datos de descarga (Clase = Numérica) que se usan para calcular los promedios mensuales. Por lo tanto, firstDate y lastDate son clase Date y se determinan a partir del Este código está adaptado de un código exitoso que calcula los promedios anuales; quizás haya una o dos cosas que todavía necesito cambiar, pero no puedo verificar errores en las partes posteriores debido a los errores iniciales que obtengo al usar POSIXlt Aquí está el código:

MonthlyAvgDischarge<-function(values){  

  #determining the number of values - i.e. the number of rows
  dataCount <- nrow(values)

  # Determining first and last dates
  firstDate <- (values[1,1])
  lastDate <- (values[dataCount,1])

  # Setting up vectors for results
  WaterMonths <- numeric(0)
  class(WaterMonths) <- "Date"
  numDays <- numeric(0)
  MonthlyAvg <- numeric(0)

  # while loop variables
  loopDate1 <- firstDate
  loopDate2 <- firstDate

  # Setting up the first inner while-loop controller, the start of the next water month
  NextH2OMonth <- as.POSIXlt(firstDate)
  NextH2OMonth$mon <- NextH2OMonth$mon + 1
  NextH2OMonth <- as.Date(NextH2OMonth)

  # Variables used in the loops
  dayCounter <- 0
  dischargeTotal <- 0
  dischargeCounter <- 1
  resultsCounter <- 1
  loopCounter <- 0
  skipcount <- 0

  # Outer while-loop, controls the progression from one year to another
  while(loopDate1 <= lastDate)
  {
    # Inner while-loop controls adding up the discharge for each water year
    # and keeps track of day count
    while(loopDate2 < NextH2OMonth)
    {
      if(is.na(values[resultsCounter,2]))
      {
        # Skip this date
        loopDate2  <- loopDate2 + 1
        # Skip this value
        resultsCounter <- resultsCounter + 1
        #Skipped counter
        skipcount<-skipcount+1
      } else{
        # Adding up discharge
        dischargeTotal <- dischargeTotal + values[resultsCounter,2]
      }

      # Adding a day
      loopDate2  <- loopDate2 + 1
      #Keeping track of days
      dayCounter <- dayCounter + 1
      # Keeping track of Dicharge position
      resultsCounter <- resultsCounter + 1
    }

    # Adding the results/water years/number of days into the vectors
    WaterMonths <- c(WaterMonths, as.Date(loopDate2, format="%mm/%Y"))
    numDays <- c(numDays, dayCounter)
    MonthlyAvg <- c(MonthlyAvg, round((dischargeTotal/dayCounter), digits=0))

    # Resetting the left hand side variables of the while-loops 
    loopDate1 <- NextH2OMonth
    loopDate2 <- NextH2OMonth

    # Resetting the right hand side variable of the inner while-loop
    # moving it one year forward in time to the next water year
    NextH2OMonth <- as.POSIXlt(NextH2OMonth)
    NextH2OMonth$year <- NextH2OMonth$Month + 1
    NextH2OMonth<-as.Date(NextH2OMonth)

    # Resettting vraiables that need to be reset
    dayCounter <- 0 
    dischargeTotal <- 0
    loopCounter <- loopCounter + 1
  } 

  WaterMonths <- format(WaterMonthss, format="%mm/%Y")
  # Uncomment the line below and return AvgAnnualDailyAvg if you want the water years also 
  # AvgAnnDailyAvg <- data.frame(WaterYears, numDays, YearlyDailyAvg) 
  return((MonthlyAvg))
}  

El mismo error ocurre en la R. normal. Cuando lo hace línea por línea, no es un problema, cuando lo ejecuta como un script, lo hace.

Respuestas a la pregunta(3)

Su respuesta a la pregunta