微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

R 中的 doParallel 无法打开 H5File 对象

如何解决R 中的 doParallel 无法打开 H5File 对象

我正在尝试使用 doParallel 运行 for 循环,但它没有处理我的 .h5 文件。 该代码适用于 ILogger ... foreach 但是当我与 %do% 并行时,它抛出了一个错误。 有谁知道这可能是什么原因造成的?

这是正常工作并提供我想要的输出的常规代码

%dopar%

但是这段代码抛出了一个错误

files <- list.files("E:/Protein Data/OneDrive_1_6-18-2021/sample/",full.names = TRUE,pattern = ".h5")

vector1 <- numeric()
vector2 <- numeric()


system.time({

foreach (i = 1:7) %do% {
  
  data_i <- H5File$new(files[i],'r+')
  object_i <- data_i[["d1"]]
  object_i <- readDataSet(object_i)
  
  
  foreach (j = 1:7) %do% {
    
    data_j <- H5File$new(files[j],'r+')
    object_j <- data_j[["d1"]]
    object_j <- readDataSet(object_j)
    
    vector1[j] <- come calculation
    vector2[j] <- some calculation
    

  }
  
  write.table(vector1,file = paste0("folder1/",paste0(i,"_vec1.txt")),row.names=FALSE,col.names=FALSE)
  write.table(vector2,file = paste0("folder2/","_vec2.txt")),col.names=FALSE)
  
}

})

这是我得到的错误

enter image description here

{ 中的错误:任务 1 失败 - “找不到对象‘H5File’”

解决方法

如果循环体使用包中的名称,则这些名称需要声明为 in the .packages argument to foreach,或者您需要通过 :: 明确限定循环体中的名称使用:

foreach (i = 1:7,.packages = 'hdf5r') %dopar% {
  data_i <- H5File$new(files[i],'r+')
  …

或者:

foreach (i = 1:7) %dopar% {
  data_i <- hdf5r::H5File$new(files[i],'r+')
  …

对于这些中哪个更好,没有既定的共识。就我个人而言,我更喜欢第二种变体。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。