为了避免创建具有许多定义单个对象设置的参数的 R 函数,我将它们收集在一个列表中,
list_my_obj <- list("var1" = ..., "var2" = ..., ..., "varN" = ...)
class(list_my_obj) <- "my_obj"
然后我定义接受这样一个列表作为参数的函数,并将列表的元素注入(inject)函数范围:
my_fun <- function(list_my_obj) {
stopifnot(class(list_my_obj) == "my_obj")
list2env(list_my_obj, envir=environment())
rm(list_my_obj)
var_sum <- var1 + var2
(...)
}
在函数范围内注入(inject)列表的元素可以避免使用
list_my_obj$var1, list_my_obj$var2
调用它们。等,在函数的后面,这会降低代码的可读性。该解决方案运行良好,但在运行
R CMD check
时会产生注释,对 var1, var2, ... varN
说“全局变量没有可见的绑定(bind)” .为避免此类注释,可以在函数体的开头为列表的每个元素“手动”创建新变量:
var1 <- list_my_obj$var1
(...)
varN <- list_my_obj$varN
但我想避免这种情况,因为
N
可以很大。在这种情况下如何抑制 R CMD 检查说明有什么更好的解决方案或想法?
谢谢!
最佳答案
函数list2env
就是为此而生的,例如:list2env(list_my_obj, env = environment())
关于r - 使列表内容在函数环境中可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41649492/