0

我在 Windows 10 下使用带有并行库的system2函数 调用外部批处理时遇到问题,我的函数执行外部程序来读取二进制文件(必须与示例在同一文件夹中的内容)。问题是 myfunction 在作为简单函数调用时返回正确的行数(35 行),但在并行化时会少 4 行(31 行)。 在这里您可以找到所有文件的示例https://www.dropbox.com/sh/kdoqdv5uh1rhr98/AAB86TpgVjVlFQRsTOvmZoipa?dl=0)我的功能如下:

运行函数

file_to_read<-"crop@seasonal$d.UED"
library(parallel)    
cl <- makeCluster(2)
clusterEvalQ(cl, library(base))
seq_along_path_index<-seq_along(all_cells$V1)
list_results<-parLapply(cl,file_to_read,
                      myfunction)) #return 31
stopCluster(cl)
#simple call
list_results2<-myfunction(file_to_read) #return 35

我的功能定义为:

myfunction<- function(file_to_read) {
    
setwd('G:/Dropbox/Public/Example')
command<-"./UED_collate.exe"
arg1<-'./crop@seasonal$d.TDF'
crop<- base::system2(command, 
                                 args=c(arg1 , file_to_read,
                                        "--captions:", "state", "site",        "cycle", "crop"),
                                 stdout = TRUE, wait=TRUE) 
n_row<-length(crop)

return(n_row)
}

谢谢

4

1 回答 1

0

它可能来自数据框也是列表的事实。例如,当您使用 时,您会得到一个大小为 1500 的数字向量。如果您想要一个包含所有数据框列的列表,请unlist(list(iris, iris))尝试使用unlistwith ,或者如果您希望数据框按行附加,请尝试使用而不是。recursive = FALSEdo.call("rbind", list(iris, iris))unlist(list(iris, iris))

于 2018-02-08T21:18:26.947 回答