如何将函数默认值分配给R .GlobalEnv

时间:2018-10-18 13:07:04

标签: r

出于某种调试目的,我经常需要在全局环境中具有函数默认值。

f<-function(a=1,b=T,c) {}

formals(f)返回具有“符号”类型值的配对列表。因此,我不能只attach(as.list(formals(f))) ...

1 个答案:

答案 0 :(得分:1)

尝试一下:

ff <- f
body(ff) <- quote(environment())

现在这会将它们放到全球环境中

list2env(as.list(ff()), .GlobalEnv)

否则这会将它们附加到搜索路径:

attach(ff())

注释1

ab是普通变量,但是c由缺失值表示,因此尽管它位于全局环境或搜索路径中,但您无法打印它;但是,您可以查询它是否像这样的变量:

inherits(try(c, silent = TRUE), "try-error")
## [1] TRUE

对于具有值的变量,该表达式将为FALSE。

注释2

仅将具有默认值的参数复制到全局环境:

ff <- f
body(ff) <- quote({
  L <- as.list(environment())
  is_missing <- sapply(names(L), function(x) {
    x <- as.list(ff)[[x]]
    missing(x)
  })
  L[! is_missing]
})
list2env(ff(), .GlobalEnv)

或附上它们,将最后一行替换为:

attach(ff())