使用 foreach 时无法从同一包中找到函数(Windows 开发)
Posted
技术标签:
【中文标题】使用 foreach 时无法从同一包中找到函数(Windows 开发)【英文标题】:Could not find function from same package when using foreach (Windows devel) 【发布时间】:2020-03-30 12:06:51 【问题描述】:使用 foreach 进行并行化的函数使用同一包中的另一个函数过去很好。但显然,它不再适用于 Windows 上的 R-devel 了??
我开始看到这个问题是我的一些包,所以我决定做一个可重复的小例子。
你可以找到一个小包来重现问题和那里的功能:https://github.com/privefl/minipkg/blob/master/R/test-parallel.R。
您可以在那里看到失败的检查:https://github.com/privefl/minipkg/commit/973b2048d43a2c75fcee088f8182776f9cd1f95d/checks?check_suite_id=343796248#step:9:151。
知道它来自哪里吗?是预期的吗?改变什么让它再次工作?
编辑: 我添加了更多构建(请参阅https://github.com/privefl/minipkg/runs/339575258);
在带有 R-devel 的 Mac 上不会失败(而 Linux 因其他原因而失败) 它在带有 R-3.6 的 Windows 上也失败了(但在我的带有 R-3.6.1 的 Windows 笔记本电脑上本地没有) 但在 win-builder 上运行良好 (https://win-builder.r-project.org/xoPf41nz47Dx/00check.log) 在 Travis (https://travis-ci.org/privefl/minipkg/builds/623573771) 和 AppVeyor (https://ci.appveyor.com/project/privefl/minipkg/builds/29461832) 上运行良好【问题讨论】:
这对你有用吗?我不认为它对我有用。 是的,它一直运行良好。 也在win-builder上?可能是 foreach 更新 - 与以前版本的 foreach 相同吗? PS。在 SO 上添加已验证的操作系统版本、R 版本 x.y.z、foreach x.y.z、doParallel x.y.z 的摘要会很有用(当您的 GitHub 链接可能消失时,对于未来的访问者也是如此) 如果在 foreach 调用之前使用minipkg:::myfun
或包含 parallel::clusterEvalQ(cl, library(minipkg))
会怎样?
@HenrikB 我开始怀疑这是否是与 Conda 相关的问题,它似乎被 GH 操作中的构建以及在我的包中报告问题的人使用。
【参考方案1】:
出现此错误是因为foreach代码需要在子进程中加载包,但是在运行GitHub Actions上的检查之前没有安装包。
如果您尝试在 Windows 机器上本地运行 R CMD check
而不先将软件包安装到您的库中,您会看到相同的结果。
我相信它可以在不安装的情况下在非 Windows 系统上运行,因为 R CMD check
在 R CMD 检查期间处理控制包库的环境变量的方式在 Windows 上与其他地方略有不同。
【讨论】:
这个问题有解决办法吗? 在运行 R CMD 检查之前在您的系统上安装软件包。 谢谢,是的,我安装了它。以上是关于使用 foreach 时无法从同一包中找到函数(Windows 开发)的主要内容,如果未能解决你的问题,请参考以下文章