Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
删除R环境中不符合条件的对象_R - Fatal编程技术网

删除R环境中不符合条件的对象

删除R环境中不符合条件的对象,r,R,我运行了一个循环,迭代并创建了一组对象,这些对象的名称都以“results_u2;”开头,并且具有不同的nrow长度,其中许多是0 为了使这个对象列表更易于处理,我想删除nrow等于0的所有对象。我在下面尝试过为类似问题提供的各种解决方案,但没有一种适用于我的特定案例。我做错了什么 : rm(list=ls(all=TRUE)[sappy(mget(ls(all=TRUE)),函数(x)nrow(x)==0)]) : rm(list=ls()[!sapply(mget(ls(),.GlobalE

我运行了一个循环,迭代并创建了一组对象,这些对象的名称都以“results_u2;”开头,并且具有不同的
nrow
长度,其中许多是0

为了使这个对象列表更易于处理,我想删除
nrow
等于0的所有对象。我在下面尝试过为类似问题提供的各种解决方案,但没有一种适用于我的特定案例。我做错了什么

:
rm(list=ls(all=TRUE)[sappy(mget(ls(all=TRUE)),函数(x)nrow(x)==0)])

:
rm(list=ls()[!sapply(mget(ls(),.GlobalEnv),函数(x){nrow(x)==0})])

:


我将使用
get
,因为它返回对象,而不是将其放入列表中。试一试

rm(list = ls(pattern = "results_")[sapply(ls(pattern = "results_"), function(x)
                                                                    NROW(get(x))) == 0])
示例

results_1 = data.frame(x = 1:5)
results_2 = data.frame(x = numeric(0))
NROW(results_1)
#[1] 5
NROW(results_2)
#[1] 0
ls()
#[1] "results_1" "results_2"
rm(list = ls(pattern = "results_")[sapply(ls(pattern = "results_"), function(x)
                                                                    NROW(get(x))) == 0])
ls()
#[1] "results_1"

关于您的问题,我的建议是将所有对象存储在一个列表中,然后为nrow==0的对象挖掘此列表。这比尝试使用变量名要容易得多,因为ls()函数只返回作为字符的名称,而不返回对象本身,因此您需要找到一种方法在后面调用它们。下面我发布了一个简短的玩具示例,介绍如何使用第一个矩阵为nrow==0的列表来实现这一点。希望这对你有帮助。 致以最良好的祝愿



尝试
rm(list=ls(pattern=“results”)[sapply(ls(pattern=“results”),function(x)NROW(get(x))==0])
@d.b谢谢你的帮助!如果你把它作为答案提交,我会核对的。另外,我不清楚为什么
NROW
有效,而
NROW
无效。这是一个典型的问题:真正的问题是你不应该首先创建这样的元素!而是将数据组织在列表和data.frames中。您知道为什么需要
NROW
而不是
NROW
?我不清楚把一个向量当作一列矩阵会有什么影响。@Phil,
NROW
即使有向量也能起作用。试试看下面的代码(1)vs
NROW(1)
results_1 = data.frame(x = 1:5)
results_2 = data.frame(x = numeric(0))
NROW(results_1)
#[1] 5
NROW(results_2)
#[1] 0
ls()
#[1] "results_1" "results_2"
rm(list = ls(pattern = "results_")[sapply(ls(pattern = "results_"), function(x)
                                                                    NROW(get(x))) == 0])
ls()
#[1] "results_1"
superList=c() #define a list to store your objects
for(i in 0:5){ #generate them and store them in your list, the first matrix has nrow = 0
  item=matrix(nrow = i,ncol=2)
  superList[[i+1]]=item
  print(i)

}
toErase=sapply(superList,function(x) nrow(x)==0)  #scan your list to find object with nrow==0
superList=superList[-which(toErase==TRUE)] #remove them from your list
sapply(superList,function(x) nrow(x)) #check that the first matrix