我正在处理一个非常大的数据集,我想尽可能地将数据保存在H2O中而不将其带入R.
我注意到每当我将H2O Frame
传递给函数时,我对帧所做的任何修改都不会反映在函数之外。有没有办法通过引用传递框架?
如果没有,那么在复制所有Frame的情况下修改函数内原始帧的最佳方法是什么?
另一个相关问题:是否将Frame传递给其他函数(只读),在H2O端制作额外的副本?我的数据集是30GB - 100GB。因此,要确保传递它们不会导致内存问题。
mod = function(fdx) {
fdx[,"x"] = -1
}
d = data.frame(x = rnorm(100),y=rnorm(100))
dx = as.h2o(d)
dx[1,]
mod(dx)
dx[1,] # does not change the original value of x
> dx[1,]
x y
1 0.3114706 0.9523058
> dx[1,]
x y
1 0.3114706 0.9523058
谢谢!
答案 0 :(得分:2)
H2O执行经典的写时复制优化。因此:
简而言之,就像在R中一样,你没事。
没有多余的副本。