2012-09-02 25 views
5

Tôi đang cố gắng song song (sử dụng snow::parLapply) một số mã phụ thuộc vào gói (ví dụ: gói không phải là snow). Các đối tượng được tham chiếu trong hàm được gọi là parLapply phải được chuyển một cách rõ ràng đến cụm bằng cách sử dụng clusterExport. Có cách nào để chuyển toàn bộ gói tới cụm thay vì phải đặt tên rõ ràng mọi chức năng (bao gồm chức năng nội bộ của gói được gọi bởi các hàm người dùng!) Trong clusterExport?Chuyển toàn bộ gói đến cụm tuyết

Trả lời

6

Cài đặt gói trên tất cả các nút, và có cuộc gọi mã của bạn library(thePackageYouUse) trên tất cả các nút thông qua một trong các lệnh có sẵn, một cái gì đó trứng như

clusterApply(cl, library(thePackageYouUse)) 

Tôi nghĩ rằng gói parallel mà đi kèm với phiên bản R gần đây có các ví dụ - - xem ví dụ tại đây từ help(clusterApply) trong đó gói boot được tải ở mọi nơi:

## A bootstrapping example, which can be done in many ways: 
clusterEvalQ(cl, { 
    ## set up each worker. Could also use clusterExport() 
    library(boot) 
    cd4.rg <- function(data, mle) MASS::mvrnorm(nrow(data), mle$m, mle$v) 
    cd4.mle <- list(m = colMeans(cd4), v = var(cd4)) 
    NULL 
}) 
+1

Cảm ơn Dirk. Có bất kỳ lý do tại sao làm 'clusterExport (ls())' sẽ là nguy hiểm? Điều này sẽ không giúp chuyển các chức năng từ các gói nhưng nó sẽ tiết kiệm rất nhiều đau đầu để nhanh chóng song song cho các vòng lặp (một người nào đó elses, không phải của tôi!) Mà dựa vào một tấn các biến toàn cục. – Michael

+0

Nó chỉ là thiết kế xấu trong đó nó sử dụng một scattershot cộng với phương pháp tiếp cận bồn rửa nhà bếp. Thiết kế những gì bạn cần trong một giải pháp nối tiếp, sau đó làm cho nó song song. –

+0

Đủ công bằng, cảm ơn sự trợ giúp. – Michael

Các vấn đề liên quan