R语言按引用(reference)传递变量

本文探讨了R语言中按引用传递变量的概念,解释了按值传递和按引用传递的区别。由于在基因组学研究中处理大量数据时内存开销问题,作者试图通过按引用传递来优化内存使用和计算效率。文章提到了通过创建自定义的Reference Class并在函数内直接修改字段的方法,以避免多次复制数据。计划进一步测试这种方法在处理大型数据集时的性能提升。

稍微研究了一下R语言按引用传递的问题,写过其他程序的人都知道,很多语言传递函数都有两种传递方式,按值传递和按引用传递,按值传递的意思就是,传入的数据仅仅是数据的值,而不是内存地址。也就是类似于Copy了一份数据,然后到函数中进行运算。而按引用传递的意思就是,直接把数据的地址穿进去。表现就是,如果你在函数中修改了传入数据的值,按值传递方法原本的数据不会有变化,但是按引用传递的话,原数据就会发生变化

之所有想到这个问题,主要有两个原因,一个是因为基因组学研究中,经常会读取很大很大的数据(几十个G),如果做研究经常不停地需要按值传递,内存开销会很大。另一个是函数计算完以后,又需要返回一个大Object(矩阵、DataFrame,list都有可能),然后这个Object需要被重新赋值给原变量,时间消耗也会增加……

比如在R程序里,经常需要修改一个矩阵是这么写的:

A <- t(A)

这样就很讨厌啊,每次对矩阵做一些修改,都需要来回复制两次数据!所以我想用传reference去解决这个问题,搜了一下,找到了下面的解决办法:

> setRefClass("MyClass",
+     fields=list(
+         name="character"
+     )
+ )
> 
> City <- new("MyClass",name="Shanghai")
> City
Reference class object of class 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值