我有几十个列表,每个都是11个 Dataframe 的集合。某些数据框为空(另一个脚本没有输出任何数据,不是错误)。
我需要通过一个函数推送每个列表,但当它看到一个空 Dataframe 时,它会阻塞。那么,我如何编写一个函数,它将接受一个列表,对每个元素进行dim(即, Dataframe ),如果是0,则跳到下一个。
我试过这样的东西:
empties <- function (mlist)
{
for(i in 1:length(mlist))
{
if(dim(mlist[[i]])[1]!=0) return (mlist[[i]])
}
}
但很明显,这没用。我会手动在这一点上,但这将永远。帮忙吗?
4条答案
按热度按时间abithluo1#
我不确定这是否正是你所要求的,但是如果你想在运行函数之前将
mlist
精简到只包含非空 Dataframe ,那么试试mlist[sapply(mlist, function(x) dim(x)[1]) > 0]
。例如:
jvlzgdj92#
sapply/索引组合的一种稍微简单和更透明的方法是使用Filter()函数:
yzxexxkh3#
你可以使用
nrow
来代替dim(x)[1]
,所以你可以这样做,您还可以使用
purrr
中的keep
和discard
在
purrr
中也有compact
,它直接删除所有空元素。它是discard
上的 Package 器如果你可以根据列数过滤列表,你可以在上面的答案中将
nrow
替换为ncol
。此外,您还可以使用lengths
来过滤列表。qhhrdooz4#
添加tidyverse选项: