我想了解当传递函数参数,创建的变量副本等。相对于所述存储器使用R使用的逻辑。 当它实际上创造刚好路过该变量的引用变量与副本? 特别是我很好奇的情况是:
f <- function(x) {x+1}
a <- 1
f(a)
是a
被逐字传递或者是一个被传递的参考?
x <- 1
y <- x
副本参考? 如果是这种情况并非如此?
如果有人可以解释这对我,我将高度赞赏。
我想了解当传递函数参数,创建的变量副本等。相对于所述存储器使用R使用的逻辑。 当它实际上创造刚好路过该变量的引用变量与副本? 特别是我很好奇的情况是:
f <- function(x) {x+1}
a <- 1
f(a)
是a
被逐字传递或者是一个被传递的参考?
x <- 1
y <- x
副本参考? 如果是这种情况并非如此?
如果有人可以解释这对我,我将高度赞赏。
当它传递变量,它总是通过复制而不是引用。 然而,有时你不会得到做,直到分配实际发生的副本。 这个过程的真实描述是传址的承诺。 看看文档
?force
?delayedAssign
一个实际的含义是,这是很困难的,如果不是不可能的,以避免需要至少两倍的RAM作为你的对象名义上占据。 修改一个大的对象一般需要做一个临时副本。
更新:2015年:我这样做(和没有)与马特Dowle同意他的data.table包提供了一个备选路线的作业,避免了拷贝复制的问题。 如果是这样的更新请求,然后我没有在会上提出的时间理解它。
有在评价规则中的R 3.2.1最近的变化apply
和Reduce
。 参考消息这里有人SO-宣布: 返回从lapply匿名函数-什么错误?
而在评论由jhetzel引用有趣的论文,现在是在这里 :