r - 使列表内容在函数环境中可用

标签 r

为了避免创建具有许多定义单个对象设置的参数的 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/

相关文章:

r - 如何从R中的向量中抽取N个随机样本?

r - ggplot2-如何在离散刻度轴值中绘制连续值?

r - 在 ggplot 中通过美学映射在每个组中显示 stat_summary

c - C 中的 R 包依赖于另一个 R 包

r - 矩阵列表中每个元素的均值

R:根据两列的相似性检查删除列

r - yield 曲线包R

r - Shiny DT::renderDataTable 的“全选”复选框

R拆分成组以并行执行

r - 在 R 中填充矩阵