关于通过函数修改的返回值

时间:2013-04-01 17:41:16

标签: r

我正在尝试使用修改数组中值的函数,这是函数

testReturn<-function(a){
for (i in 1:6){
a[i]<-a[i]+i
}
return(a)
}

以下是运行结果

> a<-rep(0,6)
> testReturn(a)
  [1] 1 2 3 4 5 6
> a
  [1] 0 0 0 0 0 0

看起来函数本身成功修改了数组a。但是返回的a数组仍然保持不变。怎么做到这一点?

1 个答案:

答案 0 :(得分:2)

您需要将函数的结果分配回a

a <- testReturn(a)

就像@Aditya所说的那样,R通过值传递,而不是通过引用,与例如子程序在Fortran中的工作方式相反。只要在函数内部对a进行了更改,就会在函数内部生成a的副本。此新版本仅在功能范围内相关。将此传递给函数外部的环境的方法是通过return()使用return参数。

返回结果后,您仍需要将其分配给全局环境中的新变量。在您显示的示例中,对象未分配给任何新对象,而是仅打印到屏幕上。要将其分配给a的全局值,只需使用上面列出的代码。