将 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 对象传递给嵌套循环的主要内容,如果未能解决你的问题,请参考以下文章
有没有一种方法可以将宏名称作为参数传递给嵌套宏,而不会在扩展最外层的宏时扩展它们?