gpt4 book ai didi

r - 从全局环境中排除特定对象类型

转载 作者:行者123 更新时间:2023-12-02 23:58:58 26 4
gpt4 key购买 nike

我的全局环境中加载了许多不同的对象。如何仅排除数据框并保留其他对象?示例:

DF1 <- data.frame(rnorm(10))
DF2 <- data.frame(rnorm(10))
DF3 <- data.frame(rnorm(10))

list1 <- list("a", "b", "c")
list2 <- list("a", "b", "c")
tf <- tempfile()
td <- tempdir()

我想到的解决方案看起来像这样(当然它不起作用)

remove(pattern="*.Rdata")

最佳答案

这是我用于执行此类任务的函数。 rmSome() 就是这样做的,仅从环境中删除一些对象。它通过应用第一个参数中给出的函数来实现这一点(即像数据帧的 is.data.frame() 一样的 is* 函数,is.list () 对于列表等)到给定环境中的对象列表并过滤出结果。

rmSome <- function(FUN, env = globalenv(), negate = FALSE) {
fun <- match.fun(FUN)
if(negate) fun <- Negate(fun)
objget <- mget(ls(envir = env), envir = env)
rmnames <- names(Filter(fun, objget))
rm(list = rmnames, envir = env)
}

例如,您可以使用以下命令从全局环境中删除所有数据框

rmSome(is.data.frame)

因此,对于给定的示例,您可以像这样删除所有数据框:

## -- rm(list=ls()) here --
## Define rmSome() here
DF1 <- data.frame(rnorm(10))
DF2 <- data.frame(rnorm(10))
DF3 <- data.frame(rnorm(10))
list1 <- list("a", "b", "c")
list2 <- list("a", "b", "c")
tf <- tempfile()
td <- tempdir()

## remove all data frames
rmSome(is.data.frame)
ls()
# [1] "list1" "list2" "rmSome" "td" "tf"

另一方面,如果您想保留所有数据帧并删除其他所有内容,则可以像这样取消数据帧的删除:

rmSome(is.data.frame, negate = TRUE)

到目前为止,我还没有发现使用其他函数(例如 is.numeric()is.environment() 等)来删除数字有任何问题,但该函数当前未设置为一次处理多个对象类型。

更新 1/28/2015: eapply() 也可用于将函数应用到环境。如果您不喜欢 mget(),您可以使用第二个函数。它的使用方式与上面的调用相同,并且可能是更好的方法。

rmSome2 <- function(FUN, env = globalenv(), negate = FALSE)  {
fun <- match.fun(FUN)
if(negate) fun <- Negate(fun)
ue <- unlist(eapply(env, fun))
rm(list = names(ue)[ue], envir = env)
}

关于r - 从全局环境中排除特定对象类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28142088/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com