稍微研究了一下R语言按引用传递的问题,写过其他程序的人都知道,很多语言传递函数都有两种传递方式,按值传递和按引用传递,按值传递的意思就是,传入的数据仅仅是数据的值,而不是内存地址。也就是类似于Copy了一份数据,然后到函数中进行运算。而按引用传递的意思就是,直接把数据的地址穿进去。表现就是,如果你在函数中修改了传入数据的值,按值传递方法原本的数据不会有变化,但是按引用传递的话,原数据就会发生变化。
之所有想到这个问题,主要有两个原因,一个是因为基因组学研究中,经常会读取很大很大的数据(几十个G),如果做研究经常不停地需要按值传递,内存开销会很大。另一个是函数计算完以后,又需要返回一个大Object(矩阵、DataFrame,list都有可能),然后这个Object需要被重新赋值给原变量,时间消耗也会增加……
比如在R程序里,经常需要修改一个矩阵是这么写的:
A <- t(A)
这样就很讨厌啊,每次对矩阵做一些修改,都需要来回复制两次数据!所以我想用传reference去解决这个问题,搜了一下,找到了下面的解决办法:
> setRefClass("MyClass",
+ fields=list(