93

我的内存被一堆中间文件(调用它们temp1temp2等等)阻塞了,我想知道是否可以在不重复rm调用的情况下将它们从内存中删除(即rm(temp1)rm(temp2))?

我试过rm(list(temp1, temp2, etc.))了,但这似乎不起作用。

4

4 回答 4

138

使列表成为字符向量(不是名称向量)

rm(list = c('temp1','temp2'))

或者

rm(temp1, temp2)
于 2012-07-24T05:54:35.843 回答
125

另一种解决方案rm(list=ls(pattern="temp")),删除与模式匹配的所有对象。

于 2012-07-24T06:31:53.993 回答
5

或者使用正则表达式

"rmlike" <- function(...) {
  names <- sapply(
    match.call(expand.dots = FALSE)$..., as.character)
  names = paste(names,collapse="|")
  Vars <- ls(1)
  r <- Vars[grep(paste("^(",names,").*",sep=""),Vars)]
  rm(list=r,pos=1)
}

rmlike(temp)
于 2012-07-24T06:09:33.833 回答
4

如果您有很多 temp'x',您可以尝试的另一个变体是(扩展@mnel 的答案)。

这里,“n”可能是存在的临时变量的数量:

rm(list = c(paste("temp",c(1:n),sep="")))
于 2017-01-20T06:57:15.683 回答