Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
rm和垃圾收集包装器_R_Garbage Collection_Wrapper - Fatal编程技术网

rm和垃圾收集包装器

rm和垃圾收集包装器,r,garbage-collection,wrapper,R,Garbage Collection,Wrapper,如何创建一个名为rm2的函数,该函数接收未知数量的对象,删除它们,然后运行gc() 我试过很多事情,但都想不出来 rm2 <- function(...){ #files <- list(...) #files <- list(deparse(substitute(...))) #rm(list = files) rm(...) capture.output(gc(),file='NUL') } rm2不确定,但可能是: rm2 <- functio

如何创建一个名为
rm2
的函数,该函数接收未知数量的对象,删除它们,然后运行
gc()

我试过很多事情,但都想不出来

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

rm2不确定,但可能是:

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())
}

rm2一个简单的选项是按照
rm
本身的操作,使用匹配调用中的
..
(来自
match.call
)。这给出了一个符号列表,然后我使用
sapply
将其转换为字符向量。然后,该向量作为参数
列表
传递给
rm
。最后,我们只返回
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"
rm2 ls()
[1] “pred”“reg4”“rm2”“tenv”
那么:

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

rm2您是否尝试过在
rm2
函数中使用
envir
参数
rm
?我认为捕获
没有多大用处。输出
-只要返回
gc()
就可以了。我不知道OP harbor为什么刚刚把它放在里面。啊-错过了。但老实说,我认为他们只是想把输出导向一个他们不需要看到的地方。在
invisible()
中包装
gc
可能是最好的解决方案。谢谢Gavin!这是greatMarek,我也喜欢这种方法。非常感谢。另外,谢谢你的空提示!我认为这是一种非常糟糕的编程技术,希望
write.csv
没有使用它。(同样,返回rm的输出会更好)