-2

假设我有示例代码

kkk<-data.frame(m.mean=1:1000, m.sd=1:1000/20)
kkk[,3:502]<-NA

for (i in 1:nrow(kkk)){
  kkk[i,3:502]<-rnorm(n=500, mean=kkk[i,1], sd=kkk[i,2])
}

我想将此函数转换为与doMC. 我的问题是foreach结果是一个列表,而我需要每次迭代的结果是一个向量,然后可以将其传输到数据框(稍后将作为 CVS 导出以进行进一步处理)。

有任何想法吗?

4

1 回答 1

1

您不需要循环,并且将大量数字矩阵放入数据框中只是为了将其视为矩阵是低效的(尽管您可能需要在按顺序完成所有数学运算在最后创建一个数据框写入 CSV 文件)。

m.mean <- 1:1000
m.sd <- 1:1000/20
num.columns <- 500
x <- matrix(nrow=length(m.mean), ncol=num.columns, 
            data=rnorm(n=length(m.mean) * num.columns))
x <- x * cbind(m.sd)[,rep(1,num.columns)] + cbind(m.mean)[,rep(1,num.columns)]
kkk <- data.frame(m.mean=m.mean, m.sd=m.sd, unname(x))
write.csv(kkk, "kkk.txt")

要回答有关从 foreach 循环直接将结果分配给现有数据结构的原始问题,这是不可能的。foreach 包的并行后端设计为在单独的 R 进程中执行每个计算,因此每个都必须向父进程返回一个单独的对象,父进程使用.combine提供给 foreach 的函数收集它们。您可以编写一个并行的 foreach 循环,将其直接分配给kkk变量,但这不会产生任何影响,因为每个分配都将发生在单独的进程中,并且不会与主进程共享。

于 2012-06-26T22:46:26.447 回答