为什么一段独立运行的代码不能在 R 中并行运行?

问题描述

我写了一段代码(附在下面),当我串行运行它时运行良好,但是当我在 R 中使用 foreach 和 doparallel 库时,我得到一个错误代码内容为:“任务 1 失败 -”丢失需要 TRUE/FALSE 的值"

for each 循环中的所有内容都独立运行,在较小的批处理中,我可以连续运行它并且可以运行。

listofColumns <- colnames(tempdata)
  foreach(i = 1:nSubsets,.export = ls(globalenv())) %dopar% {
      DoubleTempData <- get(paste0("Subset",i))
      DoubleTempData <- subset(DoubleTempData,select = -c(subset))
      RowCounter <- 2
      Columnfigurer <- 2
      LastCATEGORYIndicator <- "THERE IS NO CATEGORY,ONLY ZUUL"
      while (RowCounter <= nrow(DoubleTempData)) {
        print(paste("Checking row ",RowCounter))
        RowChecker <- max(1,RowCounter - 5)
        while (RowChecker < RowCounter) {
          print(paste("Checking row",RowCounter,"against row",RowChecker))
          if (DoubleTempData$CATEGORY[RowChecker] == DoubleTempData$CATEGORY[RowCounter])
          {
            print("The rows match!")
            while (Columnfigurer > 0) {
              if (DoubleTempData$CATEGORY[RowCounter] != LastCATEGORYIndicator) {
                Columnfigurer <- 2
              }
              print(paste ("Checking Iteration",Columnfigurer))
              if (Columnfigurer * length(listofColumns) <= length(colnames(DoubleTempData)))
              {
                print(paste("Iteration",Columnfigurer," exists"))
                CellChecker <-
                  ((Columnfigurer - 1) * length(listofColumns) + 1)
                if (is.na(DoubleTempData[[RowChecker,CellChecker]])) {
                  print(paste("Current value is NA. Writing in new value."))
                  ColumnCounter <- 1
                  while (ColumnCounter <= length(listofColumns)) {
                    DoubleTempData[[RowChecker,(Columnfigurer - 1) * length(listofColumns) +
                                      ColumnCounter]] <-
                      DoubleTempData[[RowCounter,ColumnCounter]]
                    ColumnCounter <- ColumnCounter + 1
                  }
                  DoubleTempData <- DoubleTempData[-RowCounter]
                  LastCATEGORYIndicator <-
                    DoubleTempData$CATEGORY[RowChecker]
                  RowCounter <- max(2,RowCounter - 1)
                  Columnfigurer <- Columnfigurer + 1
                  break
                }
                else
                {
                  print(paste(
                    "Current value is not NA,increasing iteration count."
                  ))
                  Columnfigurer <- Columnfigurer + 1
                  }
              }
              if (Columnfigurer * length(listofColumns) > length(colnames(DoubleTempData)))
              {
                print(paste(
                  "Iteration ","does not exist,adding iteration."
                ))
                ColumnAdder <- 1
                while (ColumnAdder <= length(listofColumns)) {
                  NewColumnName <-
                    paste0(listofColumns[ColumnAdder],"_",Columnfigurer)
                  DoubleTempData[,NewColumnName] <- NA
                  ColumnAdder <- ColumnAdder + 1
                }
              }
            }
          }
          RowChecker <- RowChecker + 1
        }
        RowCounter <- RowCounter + 1
      }
      assign(paste0("Subset",i),DoubleTempData)
    }

例如,这是我运行的随机生成的子集 1 的示例,其中包含大约 70 个观察值和 7 列(其中一个按预期被程序删除):

[![在此处输入图像描述][1]][1] [1]:https://i.stack.imgur.com/Jlytj.png

然后输出一个包含 9 个观察值和 60 列的数据集:

enter image description here

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)