我有几十个列表,每个列表都是11个数据帧的集合。某些数据帧为空(另一个脚本未输出任何数据,不是错误)。

我需要通过一个函数来推送每个列表,但是当看到一个空的数据框时,它会阻塞。因此,我该如何编写一个将获取列表的函数,对每个元素(即数据帧)进行调暗处理,如果其为0,则跳至下一个。

我尝试过这样的事情:

empties <- function (mlist)
{
 for(i in 1:length(mlist))
   {
    if(dim(mlist[[i]])[1]!=0) return (mlist[[i]])
    }
}

但是很明显,这没有用。在这一点上,我将手动执行此操作,但这将永远花费。救命?

最佳答案

我不确定这是否正是您要的内容,但是如果您想在运行函数之前将mlist缩减为仅包含非空数据帧,请尝试mlist[sapply(mlist, function(x) dim(x)[1]) > 0]

例如。:

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

关于r - 如何从列表中删除空数据框?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3261452/

10-13 06:13