出于某些调试目的,我经常需要在全局环境中具有函数默认值。
f<-function(a=1,b=T,c) {}
formals(f)
返回具有"符号"类型值的对列表。所以,我不能只是attach(as.list(formals(f)))
...
试试这个:
ff <- f
body(ff) <- quote(environment())
现在,这将将它们置于全球环境中:
list2env(as.list(ff()), .GlobalEnv)
或者这会将它们附加到搜索路径:
attach(ff())
注1
a
和b
是普通变量,但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())