如何从R apply函数访问全局/外部范围变量?

我似乎无法使应用函数访问/修改在外部声明的变量。。。有什么好处

x=data.frame(年龄=c(11,12,13),体重=c(100105110))
x
testme<-功能(df){
i<-0
应用(df,1,功能(x){
年龄<-x[1]
重量<-x[2]
cat(sprintf(“年龄=%d,体重=%d\n”,年龄,体重))
i<-i+1#这无法访问外部作用域中的i变量
z<-z+1#无法访问全局变量
})
cat(sprintf(“i=%d\n”,i))
我
}
z<-0
y<-testme(x)
cat(sprintf(“y=%d,z=%d\n,y,z))

结果:

年龄=11,体重=100
年龄=12,体重=105
年龄=13,体重=110
i=0
y=0,z=0

使用&lt&lt-运算符可以写入外部作用域中的变量:

x=data.frame(年龄=c(11,12,13),体重=c(100105110))
x
testme<-功能(df){
i<-0
应用(df,1,功能(x){
年龄<-x[1]
重量<-x[2]
cat(sprintf(“年龄=%d,体重=%d\n”,年龄,体重))
i<<-i+1#这无法访问外部范围中的i变量
z<<-z+1#无法访问全局变量
})
cat(sprintf(“i=%d\n”,i))
我
}
z<-0
y<-testme(x)
cat(sprintf(“y=%d,z=%d\n,y,z))

结果如下:

年龄=11,体重=100
年龄=12,体重=105
年龄=13,体重=110
i=3
y=3,z=3

请注意,&lt&lt-是危险的,因为你打破了范围界定。只有在真正必要时才这样做,如果这样做了,请清楚地记录该行为(至少在更大的脚本中)

发表评论