使用 R 删除名称以模式开头的工作区对象

Removing workspace objects whose name start by a pattern using R

我经常创建名称以 'tp_' 开头的临时对象并使用用户定义的函数。为了保持干净的工作区,我想创建一个函数来删除临时文件,同时保留用户定义的函数。

到目前为止,我的代码是:

rm(list = setdiff(ls(), lsf.str())) # Removes all objects except functions
rm(list = ls(, pattern = "tp_")) # Removes all objects whose name contain 'tp_'

我想:

  1. 改进第二个函数,以便删除名称为 start 的对象 'tp_'(到目前为止,它删除的对象名称为 包含 'tp_')。我试过 substr(ls(), 1, 3) 但不知何故无法将其整合到我的功能中。
  2. 将这两个功能合二为一

一些 R 对象:

tp_A = 1
myfun = function(x){sum(x)}
atp_b = 3

该函数应该只从工作区中删除 tp_A

模式参数使用正则表达式。您可以使用插入符号 ^ 来匹配字符串的开头:

rm(list=ls(pattern="^tp_"))
rm(list=setdiff(ls(pattern = "^tp_"), lsf.str()))

但是,除了名称前缀之外,还有其他模式可用于管理临时项目/保持干净的工作区。

考虑,例如,

temp<-new.env()
temp$x <- 1
temp$y <- 2
with(temp,x+y)
#> 3
rm(temp)

另一种可能性是 attach(NULL,name="temp")assign