0

rm2不明な数のオブジェクトを取り込み、それらを削除してから実行するという名前の関数を作成するにはどうすればよいgc()ですか?

私はできることを試しましたが、それを理解できません。

rm2 <- function(...){
  #files <- list(...)
  #files <- list(deparse(substitute(...)))
  #rm(list = files)
  rm(...)
  capture.output(gc(),file='NUL')
}

私はそれをお願い申し上げます。

gc()また、苦情を持ち出さないようにしましょう。RAMをホストOSに解放するのに役立つことがわかりました:)

4

3 に答える 3

2

簡単なオプションは、rmそれ自体と同じように実行...し、一致した呼び出しから (from match.call) を使用することです。これによりシンボルのリストが得られ、これを を使用して文字ベクトルに変換しsapplyます。rmこのベクトルは、引数としてに渡されますlist。最後に、 からの出力を返しますgc

rm2 <- function(...) {
  dots <- match.call(expand.dots = FALSE)$...
  dots <- sapply(dots, as.character)
  rm(list = dots, envir = globalenv())
  gc()
}

> ls()
[1] "pred" "reg4" "rm2"  "tenv" "x"    "y"   
> rm2(x, y)
         used (Mb) gc trigger (Mb) max used (Mb)
Ncells 226670 12.2     467875   25   350000 18.7
Vcells 357248  2.8     905753    7   867363  6.7
> ls()
[1] "pred" "reg4" "rm2"  "tenv"
于 2013-03-31T17:39:27.590 に答える
0

確かではありませんが、おそらくこれ:

rm2 <- function(...) {
    x <- substitute(...())
    Trim <- function (x) gsub("\\s+$", "", x)
    z <- Trim(unlist(lapply(x, function(y) as.character(y))))
    rm(list=z, envir =  .GlobalEnv)
    capture.output(gc())
}

PS は使用しNULLません'NUL'が、デフォルトではNULL任意の方法を使用するため、含める必要はありません。

于 2013-03-31T17:18:51.850 に答える
-1

どうですか:

rm2 <- function(...) {
    Call <- match.call(expand.dots = TRUE)
    Call[[1L]] <- as.name("rm")
    eval.parent(Call)
    gc(verbose = FALSE, reset = TRUE)
    NULL
}

最初の部分は関数に基づいていwrite.csvます。次にgc、詳細を設定しFALSEて、情報を印刷しないようにします。最後に関数が戻りますNULL(それがないとgc、メモリ クリーンアップの概要である結果が出力されます)。

于 2013-03-31T21:31:58.713 に答える