首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在函数中使用sfApply时的作用域问题(包snowfall - R)

在函数中使用sfApply时的作用域问题(包snowfall - R)
EN

Stack Overflow用户
提问于 2010-10-04 22:36:31
回答 2查看 1.8K关注 0票数 5

让我在R中添加另一个作用域问题,这次是降雪包。如果我在全局环境中定义了一个函数,并在稍后尝试在另一个函数的sfApply()中使用该函数,那么我的第一个函数就找不到了:

代码语言:javascript
复制
#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()

这提供了:

代码语言:javascript
复制
> func2(y)
Error in checkForRemoteErrors(val) : 
  2 nodes produced errors; first error: could not find function "func1"

但是,如果我将我的函数嵌套在另一个函数中,它就可以工作。当我在全局环境中使用sfApply()时,它也可以工作。问题是,我不想将我的函数func1嵌套在function2中,因为这会导致func1被定义了很多次(func2被用在一个类似循环的结构中)。

我已经尝试过简化代码以消除双循环,但由于问题的性质,这是不可能的。有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-04 22:49:53

我认为你想要sfExport(func1),尽管我不确定你需要在你的.GlobalEnv中还是在func2中这样做。希望这能帮上忙。

代码语言:javascript
复制
> y <- matrix(1:10,ncol=2)

> sfExport(list=list("func1"))

> func2(y)
     [,1] [,2]
[1,]    2    7
[2,]    3    8
[3,]    4    9
[4,]    5   10
[5,]    6   11
票数 4
EN

Stack Overflow用户

发布于 2010-10-04 22:52:35

我认为你现在混淆了作用域和并行计算。您正在调用新的R会话-通常由您负责在节点上重新创建您的环境。

另一种选择是使用foreach等人。foreach (或迭代器?)中有示例。文档中显示的正是这一点。看吧,乔什现在也推荐了同样的东西。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3856245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档