如何将函数默认值分配给 R.全球环境网.



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

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

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

最新更新