Cálculo eficiente de la desviación estándar acumulativa de la matriz en r

Recientemente publiqué esta pregunta en la lista de correo de r-help pero no obtuve respuestas, así que pensé en publicarla aquí también y ver si había alguna sugerencia.

Estoy tratando de calcular la desviación estándar acumulativa de una matriz. Quiero una función que acepte una matriz y devuelva una matriz del mismo tamaño donde la celda de salida (i, j) se establece en la desviación estándar de la columna de entrada j entre las filas 1 e i. Los NA deben ignorarse, a menos que la celda (i, j) de la matriz de entrada en sí sea NA, en cuyo caso la celda (i, j) de la matriz de salida también debe ser NA.

No pude encontrar una función incorporada, así que implementé el siguiente código. Desafortunadamente, esto usa un bucle que termina siendo algo lento para matrices grandes. ¿Existe una función integrada más rápida o alguien puede sugerir un mejor enfoque?

cumsd <- function(mat)
{
    retval <- mat*NA
    for (i in 2:nrow(mat)) retval[i,] <- sd(mat[1:i,], na.rm=T)
    retval[is.na(mat)] <- NA
    retval
}

Gracias.

Respuestas a la pregunta(2)

Su respuesta a la pregunta