为了避免创建具有定义单个对象设置的许多参数的R函数,我将它们收集在一个列表中,
list_my_obj <- list("var1" = ..., "var2" = ..., ..., "varN" = ...)
class(list_my_obj) <- "my_obj"
然后我定义接受这样一个列表作为参数的函数,并在函数范围中注入列表的元素:
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
(...)
}
在函数范围中注入列表的元素允许我避免在函数后面用list_my_obj $var1,list_my_obj $var2等调用它们,这会降低代码的可读性.
这个解决方案工作得很好,但是在运行R CMD检查时产生一个注释,对var1,var2,… varN说“没有可见的全局变量绑定”.
为了避免这样的注释,可以在函数体的开头为列表的每个元素“手动”创建新的变量:
var1 <- list_my_obj$var1
(...)
varN <- list_my_obj$varN
但我想避免这种情况,因为N可能很大.
关于如何在这种情况下抑制R CMD检查笔记的更好的解决方案或想法?
谢谢!
最佳答案 尝试(或在内):
f <- function(x) {
stopifnot(inherits(x, "my_obj"))
with(x, {
# ...
var_sum <- var1 + var2
# ...
var_sum
})
}
my_obj <- structure(list(var1 = 1, var2 = 2), class = "my_obj")
f(my_obj)