【发布时间】:2017-07-13 01:02:43
【问题描述】:
我运行了一个循环,它遍历并创建了一堆对象,它们的名称都以“results_”开头,并且具有不同的nrow 长度,其中许多是 0。
为了使这个对象列表更易于处理,我想删除 nrow 等于 0 的所有对象。我尝试了以下针对与此类似的问题提供的各种解决方案,但没有一个有效对于我的特殊情况。我做错了什么?
Attempt 1:
rm(list=ls(all=TRUE)[sapply(mget(ls(all=TRUE)), function(x) nrow(x) == 0)])
Attempt 2:
rm(list=ls()[!sapply(mget(ls(),.GlobalEnv), function(x) { nrow(x) == 0 } )])
rm(list=
Filter(
Negate(is.na), # filter entries corresponding to objects that don't meet function criteria
sapply(
ls(pattern="^results_"), # only objects that start with "results_"
function(x) if(nrow(x) == 0) x else NA # return names of objects of nrow length 0
)))
【问题讨论】:
-
试试
rm(list = ls(pattern = "results_")[sapply(ls(pattern = "results_"), function(x) NROW(get(x))) == 0]) -
@d.b 谢谢你的工作!如果您将其作为答案提交,我会检查它。另外,我不清楚为什么
NROW有效而nrow无效。 -
这是一个典型的x/y problem:真正的问题是你一开始就不应该创建这样的元素!相反,将数据组织在列表和 data.frames 中。
标签: r