我正在开发一个R包,需要使用snowfall包装提供的并行化.snowfall似乎没有导入同为其他包一样ggplot2,data.table等我已经包括snowfall,rlecuyer以及snow在描述文件,命名空间的文件,并在函数本身的进口参数.当我尝试访问此功能时,我收到以下错误:
Error in sfInit() : could not find function "setDefaultClusterOptions"
该sfInit函数似乎有一个nostart/ nostop参数,它表示与嵌套用法有关,sfInit但这对我来说似乎也没有.
实际的代码本身使用一个sfInit(我得到错误的地方),一些sfExports和sfLibrarys,以及一个sfLapply.
可能的解决方案:如果我snow从导入部分移动到Desciption文件中的depends部分,它似乎有效.我不知道为什么.
当您在“取决于”中包含一个包时,当有人附加您的包时,他们也会将您的包所依赖的包附加到其命名空间。
Depends 和 Imports 之间的这一差异和其他差异在本网站的其他问题中得到了很好的解释。
如果您查看{snowfall}的描述,您会发现它取决于{snow}。降雪的作者可能知道一些我们不知道的东西,并且{snow}必须将其附加到全局搜索路径才能工作。事实上,这是我上面链接的问题的最佳答案中的最重要警告......
...如果您的程序包依赖于程序包 A,而程序包 A 本身“依赖”另一个程序包 B,则您的程序包可能需要为 A 附加“Depends”指令。
这是因为包 A 中的函数是在编写时预期包 B 及其函数将附加到 search() 路径。
所以,就你而言,碰巧所有{snowfall}想要的东西都是{snow}你恰好提供的。但是,看起来更正确的行为可能是您直接依赖的{snowfall}。
setDefaultClusterOptions是包中的一个函数snow。您也需要导入它。