假设我有
a <- data.frame( z = rep( c("A", "B", "C"), 2 ), p = 1:6, stringsAsFactors=FALSE )
b <- data.frame( z = c( rep( "A", 5), rep( "B", 5 ) ), q = 1:10, stringsAsFactors=FALSE )
并希望在使用函数a
迭代时进行操作,例如b
plyr
library(plyr)
d_ply( b, "z", function( x ){
a[ a$z == x[1, "z"], "p" ] <<- a[ a$z == x[1, "z"], "p" ] + sum(x$q)
})
在这种情况下,我必须使用<<-
分配才能a
在d_ply
. 如果我只使用<-
a
不会改变。我绝对要避免的是迭代,a
因为b$z
它只包含a$z
.
所以我的问题是:
- 是否有一个简单而高效
plyr
的解决方案可以避免<<-
? - 是否有另一个方便的解决方案(也许除了
for( i in unique(b$z) ){ ... }
)? - 如果我坚持我的解决方案,以这种方式使用是否有任何影响
<<-
?我可以确定在任何情况下都只会操纵最接近a
(就环境而言)呼叫的人吗?d_ply
特别是因为这都是 ReferenceClass 方法的一部分。