出于某种调试目的,我经常需要在全局环境中具有函数默认值。
f<-function(a=1,b=T,c) {}
formals(f)
返回具有“符号”类型值的配对列表。因此,我不能只attach(as.list(formals(f)))
...
答案 0 :(得分:1)
尝试一下:
ff <- f
body(ff) <- quote(environment())
现在这会将它们放到全球环境中
list2env(as.list(ff()), .GlobalEnv)
否则这会将它们附加到搜索路径:
attach(ff())
a
和b
是普通变量,但是c
由缺失值表示,因此尽管它位于全局环境或搜索路径中,但您无法打印它;但是,您可以查询它是否像这样的变量:
inherits(try(c, silent = TRUE), "try-error")
## [1] TRUE
对于具有值的变量,该表达式将为FALSE。
仅将具有默认值的参数复制到全局环境:
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())