Позвольте мне добавить еще одну проблему с областью видимости в R, на этот раз с пакетом снегопада.Если я определяю функцию в моей глобальной среде и пытаюсь использовать ее позже в 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 в эту функцию2, так как это приведет к тому, что func1 будет определен много раз (func2 используется в структуре, подобной циклу).
Я уже пробовалупростить код, чтобы избавиться от двойного цикла, но это совершенно невозможно из-за характера проблемы.Есть идеи?