Когда я использую пакет snow для параллельных вычислений, в качестве заголовка возникает ошибка, которую я не могу найти похожую.
Во-первых, я использую lapply для запуска кода, все в порядке,Однако, когда я использую parLapply, ошибка выглядит следующим образом: Ошибка в checkForRemoteErrors (val): 4 узла вызвали ошибки;Первая ошибка: 'quote (1:25)'
Весь код выглядит следующим образом:
library(snow)
sub_mat <- function(mat, r, n, p){
mat_ctr <- mat - matrix(1,n,1)%*%matrix(mat[r,],1,p)
mat_ctr <- mat_ctr[-r,]
A <- tcrossprod(mat_ctr)
return(A)
}
one_pcov <- function(r, X, Y, n, p, q){
mx <- sub_mat(X, r, n, p)
my <- sub_mat(Y, r, n, q)
xy_ele <- mx*my
out <- sum(xy_ele)/n^2
return(out)
}
Функция lapply:
pcov1 <- function(X,Y){
n <- nrow(X)
p <- ncol(X)
q <- ncol(Y)
r <- 1:n
return(lapply(r, FUN = function(i) one_pcov(i, X=X, Y=Y, n=n, p=p, q=q)))
}
Функция parLapply:
pcov2 <- function(X, Y, f){
n <- nrow(X)
p <- ncol(X)
q <- ncol(Y)
r <- 1:n
cl <- makeCluster(4, type = "SOCK")
environment(f) <- .GlobalEnv
parLapply(cl, r, f, X=X, Y=Y, n=n, p=p, q=q)
}
Запустите их оба:
X <- matrix(rnorm(100*100,1),100,100)
Y <- matrix(rnorm(100*100,1),100,100)
pcov1(X, Y)
pcov2(X, Y, one_pcov)
Спасибо за ваши ответы ~