我有几十个列表,每个列表都是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/