Calcule cumsum () mientras ignora los valores de NA

Considere el siguiente vector nombradox.

( x <- setNames(c(1, 2, 0, NA, 4, NA, NA, 6), letters[1:8]) )
# a  b  c  d  e  f  g  h 
# 1  2  0 NA  4 NA NA  6 

Me gustaría calcular la suma acumulativa dex mientras ignora elNA valores. Muchas funciones R tienen un argumentona.rm que eliminaNA elementos previos a los cálculos.cumsum() no es uno de ellos, lo que hace que esta operación sea un poco complicada.

Puedo hacerlo de esta manera.

y <- setNames(numeric(length(x)), names(x))
z <- cumsum(na.omit(x))
y[names(y) %in% names(z)] <- z
y[!names(y) %in% names(z)] <- x[is.na(x)]
y
# a  b  c  d  e  f  g  h 
# 1  3  3 NA  7 NA NA 13 

Pero esto parece excesivo y hace muchas nuevas asignaciones / copias. Estoy seguro de que hay una mejor manera.

¿Qué mejores métodos existen para devolver la suma acumulada mientras se ignora efectivamente NA ¿valores?

Respuestas a la pregunta(4)

Su respuesta a la pregunta