我有Java和Python的背景,最近在学习R。
今天我发现,R似乎与Java和Python处理对象的方式有很大不同。
例如,以下代码:
x <- c(1:10)
print(x)
sapply(1:10,function(i){
x[i] = 4
})
print(x)
代码产生以下结果:
[1] 1 2 3 4 5 6 7 8 9 10
[1] 1 2 3 4 5 6 7 8 9 10
但是我希望输出的第二行全都是“4”,因为我在sapply函数中修改了向量。
这是否意味着R在函数调用中制作对象的副本而不是对对象的引用?
parent.frame(3)
来代替.GlobalEnv
将x存储在闭包中,这样会更加安全。(为什么是3?1-匿名函数框架,2-sapply框架,3-sapply封闭) - mbq