将 R 对象传递给嵌套循环

Posted

技术标签:

【中文标题】将 R 对象传递给嵌套循环【英文标题】:Passing R object to nested loops 【发布时间】:2017-07-17 13:11:22 【问题描述】:
myfun1 = function(dummy)
  dummy = dummy
  x2 = x.rand + 1
  return(x2)


myfun2 = function(dummy2)
  dummy2 = dummy2
  x.rand = rnorm(10)
  myfun1(dummy2)


> myfun2(3)

myfun1(dummy2) 中的错误:找不到对象“x.rand”

我有一个内部函数 myfun1,它只能接受 1 个参数 (dummy) 并将 1 添加到我的 x.rand 向量中。我还有一个外部函数myfun2,它将x.rand 向量定义为正态分布的随机样本。我的目标是能够将x.rand 对象传递给myfun1。如果不将其作为参数,我该如何做到这一点?

我使用save() 在这里查看了this 的帖子,但我不太明白......并且想知道是否有更简单的方法?

【问题讨论】:

猜猜你可以使用x.rand <<- rnorm(10)x.rand 分配给全局环境。 ... 有效,但有许多缺点,通常可以避免。 为什么不想让它成为参数? 另一种选择是在 myfun2 中定义 myfun1。然后它将可以访问 myfun2 环境中的对象。 @FlorianMaas myfun1 应该是我传递给nmkb(fn = myfun1, par = c(...)) 函数调用的目标函数。它只能接受 1 个参数(即par = c(...))。除了par = c(...),我想传递另一个 或者,您可以从 fun2 返回 list(dummy1,x.rand),并将其用作 fun1 中的单个输入参数,如 dummy = input_list[[1]] 和 x.rand =输入列表[[2]]。不确定这是否有帮助,但只是大声思考。 【参考方案1】:

现在函数只接受一个输入参数:

myfun1 = function(input_list)
  dummy = input_list[[1]]
  x2 = input_list[[2]] + 1
  return(x2)


myfun2 = function(dummy2)
  dummy2 = dummy2
  x.rand = rnorm(10)
  myfun1(list(dummy2,x.rand))


myfun2(3)

不确定这是否是您需要的。但从技术上讲,它只有一个输入参数,并且可以访问 x.rand 向量。

【讨论】:

以上是关于将 R 对象传递给嵌套循环的主要内容,如果未能解决你的问题,请参考以下文章

将预定义的对象传递给 Alamofire

有没有一种方法可以将宏名称作为参数传递给嵌套宏,而不会在扩展最外层的宏时扩展它们?

Apollo Server:将参数传递给嵌套解析器

如何将参数传递给python中的嵌套类

角度 4 将包含其他对象的对象传递给 FormBuilder.group 函数会导致奇怪的表单行为

通过 add_job_flow_steps 将嵌套字典传递给 EMR