Ass*_*him 6 variables r reset clear
在使用随机生成的输入数据在R中测试模拟时,我发现并修复了一些错误,现在想要使用相同的数据重新运行模拟,但是删除了所有中间变量以确保它是一个干净的测试.
有没有办法从工作区中删除几十个手动选择的变量,而不必:
a)破坏整个工作区,例如rm(list=ls()),或b)键入每个变量名称,例如remove(name1, name2, ...)?
理想的解决方案是用于ls()检查定义,然后选择我想要删除的索引,例如
ls() # inspect definitions
delme <- c(3,5,7:9,11,13) # names selected for removal
remove(ls()[delme]) # DESIRED SOLUTION -- doesn't quite work this way
Run Code Online (Sandbox Code Playgroud)
(事后看来,我应该使用固定的种子来生成随机输入数据,这样可以清除所有内容,然后重新运行测试......)
有一个更简单、更直接的解决方案:
vars.to.remove <- ls()
vars.to.remove <- temp[c(1,2,14:15)]
rm(list = vars.to.remove)
Run Code Online (Sandbox Code Playgroud)
或者,更好的是,如果您擅长变量命名方案,则可以使用以下模式匹配策略:
例如,我用起始字符串“Temp”命名所有临时变量。... 所以,你可以有 Temp.Names、Temp.Values、Temp.Whatever
以下生成与此模式匹配的变量列表
ls(pattern = "^Temp\\.")
Run Code Online (Sandbox Code Playgroud)
所以,你可以使用删除所有不需要的变量ONE行代码,如下所示:
rm(list = ls(pattern = "^Temp\\."))
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助。
阿萨德,虽然我认为问题的实际答案在评论中,但我建议将这种模式作为更广泛的解决方案:
rm(list=
Filter(
Negate(is.na), # filter entries corresponding to objects that don't meet function criteria
sapply(
ls(pattern="^a"), # only objects that start with "a"
function(x) if(is.matrix(get(x))) x else NA # return names of matrix objects
) ) )
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我将删除所有以"a"开头的矩阵对象.通过修改此处pattern使用的参数和函数sapply,您可以非常精确地控制删除的内容,而无需指定多个名称.
如果您担心这可能会删除您不想删除Filter(...的内容,则可以将操作结果存储在变量中,查看内容,然后执行rm(list=...)命令.
| 归档时间: |
|
| 查看次数: |
22859 次 |
| 最近记录: |