有没有办法R
并行操作一个对象?我了解mclapply
在parallel
fork 进程中并将工作区内容复制到每个进程。相反,我希望让我的核心在一个对象上执行独立的工作,而不必拆分和组合结果。一个用例是将numeric
data.frame 中的所有列factor
并行更改为列。另一个用例是 data.frame 中具有大量级别的分箱因子。我尝试这样做的主要原因是 1)避免内存不足和 2)提高速度。
下面,objectb
是在 data.frame 中拆分列,a
然后在 apply 后合并它们的结果factor
。相反,我想直接对 object 进行操作a
。在串行中,作为循环的副作用,我能够将列转换a
为类型。同时,作为副作用,我无法将 的列转换为类型,因为(据我所知)内部的,指的是每个衍生进程的本地对象。factor
foreach...%do%
a
factor
foreach...%dopar%
a
里面有没有R
可以让我这样做的包?
a <- data.frame(b=c(1,1,2,2), c=c(2,2,3,3))
str(a)
> str(a)
'data.frame': 4 obs. of 2 variables:
$ b: num 1 1 2 2
$ c: num 2 2 3 3
#serial
b <-
foreach (i = iter(1:ncol(a)), .combine = data.frame) %do% {
a[,i] <- factor(a[,i])
}
str(a)
str(b)
> str(a)
'data.frame': 4 obs. of 2 variables:
$ b: Factor w/ 2 levels "1","2": 1 1 2 2
$ c: Factor w/ 2 levels "2","3": 1 1 2 2
> str(b)
'data.frame': 4 obs. of 2 variables:
$ result.1: Factor w/ 2 levels "1","2": 1 1 2 2
$ result.2: Factor w/ 2 levels "2","3": 1 1 2 2
#parallel
a <- data.frame(b=c(1,1,2,2), c=c(2,2,3,3))
b <-
foreach (i = iter(1:ncol(a)), .combine = data.frame) %dopar% {
a[,i] <- factor(a[,i])
}
str(a)
str(b)
> str(a)
'data.frame': 4 obs. of 2 variables:
$ b: num 1 1 2 2
$ c: num 2 2 3 3
> str(b)
'data.frame': 4 obs. of 2 variables:
$ result.1: Factor w/ 2 levels "1","2": 1 1 2 2
$ result.2: Factor w/ 2 levels "2","3": 1 1 2 2