【问题标题】:Writing data back to dataframe after parallel computing in R在R中并行计算后将数据写回数据帧
【发布时间】:2016-07-10 10:13:47
【问题描述】:

我是 R 中并行计算的新手。 我浏览了 StackOverFlow 上有关该主题的各种链接并编写了初始代码

library(doParallel)
library(foreach)

detectCores()
## [1] 4
# Create cluster with desired number of cores
cl <- makeCluster(3)
# Register cluster
registerDoParallel(cl)
# Find out how many cores are being used
getDoParWorkers()

我的目标是对每一行进行重复计算,我的函数看起来像

func2<-function(i)
{
  msgbody<-tolower(as.character(purchase$msg_body[i]))
  purchase$category[i]<-category_fun(i,msgbody)  
}

为此我写了一个foreach循环

foreach(i = 1:nrow(purchase)) %dopar% func2(i)

但是,问题是“func2”应该写回数据帧但它没有写回任何内容,所有条目都与旧条目相同

感谢您的帮助。

【问题讨论】:

  • 您是否将foreach 结果保存到任何内容?此外,您可能需要将一些变量导出给所有工作人员。首先尝试在一个小的虚拟数据集中运行您的代码。
  • 您的函数缺少正确的返回值。特别是对于并行处理,进行正确的函数式编程非常重要。将函数内部所需的每个对象作为函数参数传递,并返回函数外部所需的每个对象。

标签: r parallel-processing analytics doparallel


【解决方案1】:

我相信这在您所指示的情况下会更好。您可以编写一个适用于每个 msg_body 字符串的函数:

    func2 <- function(msg_body)
    {
      return(category_fun(i,tolower(as.character(purchase$msg_body[i])))  
    }

    result <- foreach(i=1:nrow(purchase),.combine=c) %dopar% {func2(purchase$msg_body[i]}

   purchase$category <- result

我确实认为你最好使用apply() 来解决这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-11
    • 1970-01-01
    • 1970-01-01
    • 2018-09-17
    • 2017-12-19
    • 2013-12-10
    • 1970-01-01
    相关资源
    最近更新 更多