bnlearn 的并行化(使用并行包)
parallelization of bnlearn (with parallel package)
我正在使用 R
包 bnlearn
来估计贝叶斯网络结构。它有一个使用 parallel
包的内置并行化。但是,那是行不通的。
使用联机帮助页中的示例 bnlearn::parallel integration
:
library(parallel)
library(bnlearn)
cl = makeCluster(2)
# check it works.
clusterEvalQ(cl, runif(10)) # -> this works
data(learning.test)
res = gs(learning.test, cluster = cl)
这里我得到错误"Error in check.cluster(cluster) : cluster is not a valid cluster object."
有人知道如何让它工作吗?
这是一个错误。请将其报告给软件包维护者。
这里是check.cluster
的代码:
function (cluster)
{
if (is.null(cluster))
return(TRUE)
if (any(class(cluster) %!in% supported.clusters))
stop("cluster is not a valid cluster object.")
if (!requireNamespace("parallel"))
stop("this function requires the parallel package.")
if (!isClusterRunning(cluster))
stop("the cluster is stopped.")
}
现在,如果您查看 cl
的 class:
class(cl)
#[1] "SOCKcluster" "cluster"
让我们重现检查:
bnlearn:::supported.clusters
#[1] "MPIcluster" "PVMcluster" "SOCKcluster"
`%!in%` <- function (x, table) {
match(x, table, nomatch = 0L) == 0L
}
any(class(cl) %!in% bnlearn:::supported.clusters)
#[1] TRUE
cluster
不在 supported.clusters
中。我相信,该函数应该只检查集群是否有受支持的 class 而不是是否有不受支持的 class.
作为解决方法,您可以更改 supported.clusters
:
assignInNamespace("supported.clusters",
c("cluster", "MPIcluster",
"PVMcluster", "SOCKcluster"),
"bnlearn")
我正在使用 R
包 bnlearn
来估计贝叶斯网络结构。它有一个使用 parallel
包的内置并行化。但是,那是行不通的。
使用联机帮助页中的示例 bnlearn::parallel integration
:
library(parallel)
library(bnlearn)
cl = makeCluster(2)
# check it works.
clusterEvalQ(cl, runif(10)) # -> this works
data(learning.test)
res = gs(learning.test, cluster = cl)
这里我得到错误"Error in check.cluster(cluster) : cluster is not a valid cluster object."
有人知道如何让它工作吗?
这是一个错误。请将其报告给软件包维护者。
这里是check.cluster
的代码:
function (cluster)
{
if (is.null(cluster))
return(TRUE)
if (any(class(cluster) %!in% supported.clusters))
stop("cluster is not a valid cluster object.")
if (!requireNamespace("parallel"))
stop("this function requires the parallel package.")
if (!isClusterRunning(cluster))
stop("the cluster is stopped.")
}
现在,如果您查看 cl
的 class:
class(cl)
#[1] "SOCKcluster" "cluster"
让我们重现检查:
bnlearn:::supported.clusters
#[1] "MPIcluster" "PVMcluster" "SOCKcluster"
`%!in%` <- function (x, table) {
match(x, table, nomatch = 0L) == 0L
}
any(class(cl) %!in% bnlearn:::supported.clusters)
#[1] TRUE
cluster
不在 supported.clusters
中。我相信,该函数应该只检查集群是否有受支持的 class 而不是是否有不受支持的 class.
作为解决方法,您可以更改 supported.clusters
:
assignInNamespace("supported.clusters",
c("cluster", "MPIcluster",
"PVMcluster", "SOCKcluster"),
"bnlearn")