graficas - tags$style shiny
¿Cómo elimino marcos de datos vacíos de una lista? (2)
No estoy seguro de si esto es exactamente lo que está pidiendo, pero si desea recortar mlist
para que contenga solo marcos de datos no vacíos antes de ejecutar la función en él, intente mlist[sapply(mlist, function(x) dim(x)[1]) > 0]
.
P.ej:
R> M1 <- data.frame(matrix(1:4, nrow = 2, ncol = 2))
R> M2 <- data.frame(matrix(nrow = 0, ncol = 0))
R> M3 <- data.frame(matrix(9:12, nrow = 2, ncol = 2))
R> mlist <- list(M1, M2, M3)
R> mlist[sapply(mlist, function(x) dim(x)[1]) > 0]
[[1]]
X1 X2
1 1 3
2 2 4
[[2]]
X1 X2
1 9 11
2 10 12
Tengo docenas de listas, cada una es una colección de 11 marcos de datos. Algunos marcos de datos están vacíos (otro script no generó ningún dato, no fue un error).
Necesito empujar cada lista a través de una función, pero se ahoga cuando ve un marco de datos vacío. Entonces, ¿cómo escribo una función que tome una lista, atenúe cada elemento (es decir, el marco de datos) y, si es 0, salte al siguiente?
Intenté algo como esto:
empties <- function (mlist)
{
for(i in 1:length(mlist))
{
if(dim(mlist[[i]])[1]!=0) return (mlist[[i]])
}
}
Pero claro, eso no funcionó. Haría esto manualmente en este punto pero eso tomaría para siempre. ¿Ayuda?
Un enfoque un poco más simple y más transparente para la combinación sapply / indexing es usar la función Filter ():
> Filter(function(x) dim(x)[1] > 0, mlist)
[[1]]
X1 X2
1 1 3
2 2 4
[[2]]
X1 X2
1 9 11
2 10 12