我正在尝试多核函数(在Windows中),它一度调用另一个主力函数(函数内的函数)。这是一个最小的工作示例。您需要doSMP
和revoIPC
个软件包(要获取它们,请参阅Tal的帖子here)。
func1 <- function(x) {sqrt(x)}
func2 <- function(y) {
func1(y)
}
library(doSMP)
wrk <- startWorkers(workerCount = 4) #I have 4 cores, so adjust to your specs
registerDoSMP(wrk)
obj.result <- foreach(i = 1:10000) %dopar% func2(i)
以上例程不起作用,但如果我func1
func2
内嵌func2 <- function(y) {
func1 <- function(x) {sqrt(x)}
func1(y)
}
%dopar%
这个过程顺利进行(据我所知)。
如何使用{{1}}从外部调用函数?
答案 0 :(得分:1)
它看起来像范围问题。
您的func1
在调用工作区中已知,但在计算节点上未知。有解决方案,例如foreach包有一个名为Nesting Foreach Loops的整个插图。
答案 1 :(得分:0)
在foreach函数中,如果要加载包以执行函数fun2,则有一个参数传递
通常在您的示例中,如果fun1是包PACKAGE1的一部分,请执行
obj.result <- foreach(i = 1:10000, .packages="PACKAGE1") %dopar% func2(i)
而不是
obj.result <- foreach(i = 1:10000) %dopar% func2(i)