Hãy để tôi thêm một vấn đề phạm vi khác trong R, lần này với gói tuyết rơi. Nếu tôi xác định một hàm trong môi trường toàn cầu của tôi, và tôi cố gắng sử dụng một mà sau này trong một sfApply() bên trong chức năng khác, chức năng đầu tiên của tôi là không tìm thấy bất kỳ hơn:Phạm vi vấn đề khi sfApply được sử dụng trong chức năng (gói tuyết rơi - R)
#Runnable code. Don't forget to stop the cluster with sfStop()
require(snowfall)
sfInit(parallel=TRUE,cpus=3)
func1 <- function(x){
y <- x+1
y
}
func2 <- function(x){
y <- sfApply(x,2,function(i) func1(i))
y
}
y <- matrix(1:10,ncol=2)
func2(y)
sfStop()
Điều này cho phép:
> func2(y)
Error in checkForRemoteErrors(val) :
2 nodes produced errors; first error: could not find function "func1"
Nếu tôi lồng chức năng của mình vào bên trong chức năng khác, tuy nhiên, nó hoạt động. Nó cũng hoạt động khi tôi sử dụng sfApply() trong môi trường toàn cục. Thing là, tôi không muốn lồng hàm func1 của tôi bên trong hàm đó2, vì điều đó sẽ khiến cho func1 được định nghĩa nhiều lần (func2 được sử dụng trong một cấu trúc giống như vòng lặp).
Tôi đã thử đơn giản hóa mã để loại bỏ vòng lặp kép, nhưng điều đó hoàn toàn không thể do tính chất của sự cố. Bất kỳ ý tưởng?
trong '.GlobalEnv' là hoàn hảo. Tôi đã thêm một ví dụ nhỏ. Cám ơn! –
@Joris, bạn được chào đón. Xin lỗi tôi đã không giải thích _why_ bạn cần phải xuất khẩu, nhưng may mắn Dirk cung cấp thông tin đó. ;-) –