【发布时间】:2020-10-11 10:16:34
【问题描述】:
我想在 R 中通过引用来模拟调用,在我的搜索中发现了这个链接 https://www.r-bloggers.com/call-by-reference-in-r/。
使用上面链接中给出的策略,我尝试创建一个函数来修改传递给它的整数向量并返回修改后的向量。这是它的实现
library(purrr)
fun = function(top){
stopifnot(is_integer(top))
top1 <- top
top1 <- c(top1,4L)
eval.parent(substitute(top<-top1))
top1
}
当我创建一个变量并传递给这个函数时,它可以完美地工作,如图所示
> k <- c(9L,5L)
> fun(k)
[1] 9 5 4
> k
[1] 9 5 4
但是当我直接传递整数向量时,它会抛出一个错误:
> fun(c(3L,4L))
Error in c(3L, 4L) <- c(3L, 4L, 4L) :
target of assignment expands to non-language object
对于这种情况是否有解决方法,如果直接传递一个向量,那么我们只返回修改后的向量作为结果?
任何帮助将不胜感激......
【问题讨论】:
-
没有解决方法。您实际上创建了一个函数,该函数将变量名称作为输入并修改该变量作为运行的副作用。因为
c(3L,4L)不是变量名,所以函数无法按预期工作。 -
@jdobres 有没有其他方法可以在 R 中安全地实现引用传递?
-
这能回答你的问题吗? Can you pass-by-reference in R?
-
查看我的扩展答案。
标签: r parameter-passing pass-by-reference