2011-01-29 17 views

答えて

17

ls()ニーズが正しい場所に見て:

CleanEnvir <- function(pattern = "tmp"){ 
     rm(list = ls()[grep("tmp", ls())], envir = globalenv()) 
    } 

    keep <- 1 
    tmp.to.be.removed <- 0 
    ls() 

    ## does not work 
    CleanEnvir() 
    ls() 

    ## does work 
    rm(list = ls()[grep("tmp", ls())], envir = globalenv()) 
    ls() 
+0

ありがとうございました!私はls()部分を完全に無視しました... –

6

あなたは世界のEnvで検索を行うだけでなく、そこに除去する必要があります。デフォルトでは、現在のフレーム内では、関数CleanEnvirのケースが表示され、元の画像には"pattern"しか見つかりませんでした。

与え
CleanEnvir <- function(pattern = "tmp") { 
    objs <- ls(pos = ".GlobalEnv") 
    rm(list = objs[grep("tmp", objs)], pos = ".GlobalEnv") 
} 

:私はこのためだ

> CleanEnvir <- function(pattern = "tmp") { 
+  objs <- ls(pos = ".GlobalEnv") 
+  rm(list = objs[grep("tmp", objs)], pos = ".GlobalEnv") 
+ } 
> ls() 
[1] "CleanEnvir"  "foo"    "keep"    
[4] "tmp.to.be.removed" 
> CleanEnvir() 
> ls() 
[1] "CleanEnvir" "foo"  "keep" 
+0

おかげで私は)(lsとは見なされません - 一部問題があるとしてところで、grepの第二は、ls()()も必要です。 (envir = globalenv())に置き換えられます。 –

+0

OK。これは正しく追加されましたが、以前テストしたところで動作するようでした。 –

2

最短コードソリューションは、このいずれかになります。変数を貼り付けるために、代替逆パース

y <- TRUE 

CleanEnvir <- function(x) {rm(list=deparse(substitute(x)),envir=.GlobalEnv)} 

CleanEnvir(y) 
y 

特定の変数を削除その値ではなく名前が であり、確かにpos = ".GlobalEnv"が動作しますしかし、単純にenvir = .GlobalEnvを使用することもできます。

解決策2:実際にパターンマッチングが可能です。私はtmp1とtmp2を削除したいのですが、Global.tmpとlocaltmpという名前の別の変数があるのを忘れてしまいました。 。。!パターンによる例

削除:

myvar1 <- TRUE 
myvar2 <- FALSE 

Pat.clean.Envir <- function(x) { rm(list = ls(.GlobalEnv)[grep(deparse(substitute(x)), ls(.GlobalEnv))], envir = .GlobalEnv) } 

Pat.clean.Envir(myvar) 

歓声

+0

これは*他の答えより*短いですが、OPで示唆されている引数の部分一致は許可されません。 – BenBarnes

+0

私はそうする解決策を編集しました。しかし、ユーザは、タイトルや説明的な質問にパターンマッチングを求めることはありませんでした。彼のコードでのみパターンマッチングを含むアプローチがあります。 私の答えで説明したように、あなたが間違っていると間違った変数を削除するので、部分パターンマッチングを強くお勧めします。 1文字のパターンで楽しく実行してください:事故によって "a"、変数の80%がなくなりました。 – Mark

関連する問題