所以我正在使用 R6(我的老板偏好)在 R 中编写一个程序。它必须做一些繁重的数字运算,所以我试图让 R6 类中的关键变量就地修改。不幸的是,在普通 R 中使变量修改到位的方法似乎在 R6 类中不起作用。我在下面构建了一个最小的示例。您可以清楚地看到 R6 类内部的变量,该变量在函数之后跳转到新的内存地址。在 R6 类之外,做完全相同的事情不会导致复制。任何人都可以就我为什么以及如何让类中的变量修改到位给我任何建议吗?
my_r6 <- R6Class("my_r6",
public = list(
test = function() {
for (i in 1:5) {
private$x$a[i] <- 3
}
}
),
private = list(
x = list(a = c(1, 2, 3, 4, 5))
)
)
temp_r6 <- my_r6$new()
tracemem(temp_r6$.__enclos_env__$private$x$a)
temp_r6$test()
y <- list(b = c(1, 2, 3, 4, 5))
tracemem(y$b)
for (i in 1:5) {
y$b[i] <- 3
}