rm()で複数のオブジェクトを削除します


84

私のメモリは、多数の中間ファイル(temp1、temp2などと呼びます)によって詰まっています。それはやってなくて、メモリからそれらを除去することが可能であるrm(temp1)rm(temp2)一度に一つの?試しましたrm(list(temp1, temp2, etc.))が、うまくいかないようです。

回答:


123

リストを文字ベクトル(名前のベクトルではない)にします

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

または

rm(temp1, temp2)

3
メモリ内のすべてを削除するには、次のように言うことができます。rm(list = ls())
Sam

5
rm(list = ls(all = TRUE))確実にすべてを取得したい場合は@Sam 。
デイソン2015

1
それはで動作し%>%ますか?などlist(...) %>% rm(list = .)

それの利点を説明していただけますlistか?2番目のオプションでTABオートコンプリートだけでなく、すべての変数名を入力するのは不必要に複雑なようです。
laviex

112

他の解決策rm(list=ls(pattern="temp"))は、パターンに一致するすべてのオブジェクトを削除します。


Josh Paulsonがここで説明しました(何ls(...)が起こったのかわかりませんでしたが、Unixのbash関数lsのようなものだと思いますか?)-おっと、JoshPaulsonは@Samによって説明された特定の種類を使用しましたTo remove everything in the memory, you can say: rm(list = ls())
The Red Pea

これは正常に機能しますが、小さなバグがある可能性があります。「ABCtemp」という名前のオブジェクトがある場合は、それも削除されます。'temp'で始まるオブジェクトを削除し、 'ABCtemp'を保持するにはどうすればよいですか?
user3768495 2016年

8
パターンに基準を追加するだけです。あなたの例でpattern="^temp"は、は「temp」で始まる変数のみをキャッチし、変数はキャッチしませんABCtemp
アラン

1
別の可能性はここに@BrodieGによって与えられた答えであるstackoverflow.com/questions/21677923/...
グリーンDIOD

3

または正規表現を使用する

"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)

3

試してみることができるもう1つのバリエーションは、一時的な「x」が多い場合です(@mnelの回答を拡張する)。

ここで「n」は存在する一時変数の数である可能性があります

rm(list = c(paste("temp",c(1:n),sep="")))
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.