R,深与浅拷贝,通过引用传递(R, deep vs. shallow copies, pass by

2019-06-24 14:10发布

我想了解当传递函数参数,创建的变量副本等。相对于所述存储器使用R使用的逻辑。 当它实际上创造刚好路过该变量的引用变量与副本? 特别是我很好奇的情况是:

f <- function(x) {x+1}
a <- 1
f(a)

a被逐字传递或者是一个被传递的参考?

x <- 1
y <- x

副本参考? 如果是这种情况并非如此?

如果有人可以解释这对我,我将高度赞赏。

Answer 1:

当它传递变量,它总是通过复制而不是引用。 然而,有时你不会得到做,直到分配实际发生的副本。 这个过程的真实描述是传址的承诺。 看看文档

?force
?delayedAssign

一个实际的含义是,这是很困难的,如果不是不可能的,以避免需要至少两倍的RAM作为你的对象名义上占据。 修改一个大的对象一般需要做一个临时副本。

更新:2015年:我这样做(和没有)与马特Dowle同意他的data.table包提供了一个备选路线的作业,避免了拷贝复制的问题。 如果是这样的更新请求,然后我没有在会上提出的时间理解它。

有在评价规则中的R 3.2.1最近的变化applyReduce 。 参考消息这里有人SO-宣布: 返回从lapply匿名函数-什么错误?

而在评论由jhetzel引用有趣的论文,现在是在这里 :



文章来源: R, deep vs. shallow copies, pass by reference