R にもう 1 つのスコープの問題を追加します。今回は Snowfall パッケージを使用します。グローバル環境で関数を定義し、後で別の関数内の sfApply() でその関数を使用しようとすると、最初の関数が見つかりません:
#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()
これは与える :
> func2(y)
Error in checkForRemoteErrors(val) :
2 nodes produced errors; first error: could not find function "func1"
ただし、関数を他の関数内にネストすると、機能します。グローバル環境で sfApply() を使用した場合にも機能します。つまり、関数 func1 をその function2 内にネストしたくありません。これは、func1 が何度も定義される原因となるためです (func2 はループのような構造で使用されます)。
二重ループを取り除くためにコードを単純化しようとしましたが、問題の性質上、それはまったく不可能です。何か案は?