如何在R中的函数局部环境中删除变量的子集?

时间:2019-05-31 20:06:28

标签: r

在函数返回R之前,我想删除所有局部变量,只有一个或两个除外。

这是一个最小的可复制示例:

f <- function(){
  keep_this_local_var <- 3
  remove_this_local_var <- 4
  rm(setdiff(ls(environment()), c("keep_local_var"))) # doesn't work
  return(ls(environment())) 
}
f() # should only be 3

动机:我的“现实生活” f函数多次调用source()。每个source()调用都会生成大量随机的变量。我不会事先知道每个变量的名称。但是,我确实有一个要保留的变量名的简短列表。过去,类似的代码对我有用,但是当我source.GlobalEnv时。

1 个答案:

答案 0 :(得分:0)

这有效:

f <- function(){
  keep_this_local_var <- 3
  remove_this_local_var <- 4
  rm(
    list=setdiff(ls(environment()), "keep_this_local_var"),
    envir = environment()
    )
  return(ls(environment())) 
}
f() # should only be 3

正如this thread所述,您需要指定list=