gpt4 book ai didi

r - 不能在 foreach 循环中使用 read.table() (doSMP)

转载 作者:行者123 更新时间:2023-12-01 13:01:58 25 4
gpt4 key购买 nike

我正在尝试使用 doSMP/foreach 来并行化 R 中的一些代码。

我有一个巨大的二维遗传数据矩阵 - 10,000 个观察值(行)和 300 万个变量(列)。由于内存问题,我不得不将这些数据分成 1000 个变量的 block 。

我想读入每个文件,做一些统计,然后将这些结果写到一个文件中。使用 for 循环很容易,但我想使用 foreach 来加快速度。这是我正在做的:

# load doSMP, foreach, iterators, codetools
require(doSMP)

# files i'm processing
print(filelist <- system("ls matrix1k.*.txt", T))

#initialize processes
w <- startWorkers(2)
registerDoSMP(w)

# for each file, read into memory, do some stuff, write out results.
foreach (i = 1:length(filelist)) %dopar% {
print(i)
file <- filelist[i]
print(file)
thisfile <- read.table(file,header=T)
# here i'll do stuff using that file
# here i'll write out results of the stuff I do above
}

#stop processes
stopWorkers(w)

但这会导致一个错误:Error in { : task 2 failed - "cannot open the connection"。当我将 %dopar% 更改为 %do% 时,完全没有问题。

最佳答案

在您的 foreach 循环中,您必须调用您将要使用的包。

示例:

我)

foreach (i =  1:length(filelist), .packages = "rgdal") %dopar% ......

在您的情况下,您应该调用包向量。

示例 2:

ii)

package.vector <- c("package.1","package.2",etc)

foreach (i = 1:length(filelist), .packages = package.vector) %dopar% ......

我建议你调用你正在使用的所有包

关于r - 不能在 foreach 循环中使用 read.table() (doSMP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5399974/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com