在 R 中使用 foreach 循环读取 MATLAB .mat 文件时出现问题
Posted
技术标签:
【中文标题】在 R 中使用 foreach 循环读取 MATLAB .mat 文件时出现问题【英文标题】:Problems reading MATLAB .mat files with a foreach loop in R 【发布时间】:2016-11-10 10:24:41 【问题描述】:我有一千多个 matlab 文件要读入 R。我使用 R.matlab 包来读取它们,我想并行操作。
但是,一旦我调用循环(我从所有 .mat 文件生成单个数据集)我得到一个错误:
中的错误:任务 1 失败 - “不可能遇到函数 "readMat""
(我翻译了“”之间的错误部分,因为我的R不是英文的)
没有 foreach 命令,一切都很好,但时间太长了。这是代码
library(R.matlab)
library(plyr)
library(foreach)
library(doParallel)
a = list.files()
data <- readMat(a[1])
for(j in 2:length(a))
data1 <- readMat(a[j])
if (is.null(data1)==FALSE)
data <- rbind.fill(data,data1)
print(j)
使用 foreach 命令我得到了上述错误。代码如下:
library(R.matlab)
library(plyr)
library(foreach)
library(doParallel)
cl<-makeCluster(8)
registerDoParallel(cl)
a = list.files()
data <- readMat(a[1])
foreach(j = 2:length(a)) %dopar%
data1 <- readMat(a[j])
if (is.null(data1)==FALSE)
data <- rbind.fill(data,data1)
print(j)
是不是说foreach和readMat不能一起用?
【问题讨论】:
您是否忘记关闭%dopar%
之前的第二组括号?
ops,一个错字……但它在代码中被关闭了。
【参考方案1】:
如果有人想知道,我忘了将R.matlab
导出到每个集群节点。只需在foreach
调用中添加.packages
参数
library(R.matlab)
library(plyr)
library(foreach)
library(doParallel)
cl<-makeCluster(8)
registerDoParallel(cl)
a <- list.files()
data <- readMat(a[1])
foreach(j = 2:length(a), .packages = c("plyr", "doParallel",
"R.matlab")) %dopar%
data1 <- readMat(a[j])
if (!is.null(data1))
data <- rbind.fill(data,data1)
【讨论】:
你能用这个print(j)
吗?当它在循环时?以上是关于在 R 中使用 foreach 循环读取 MATLAB .mat 文件时出现问题的主要内容,如果未能解决你的问题,请参考以下文章