Rscript无法加载methods包,而R可以 - 为什么?有什么后果?

27

刚刚看到这个:

$ Rscript -e "sessionInfo()['basePkgs']"
$basePkgs
[1] "stats"     "graphics"  "grDevices" "utils"     "datasets"  "base"

$ R --vanilla --slave -e "sessionInfo()['basePkgs']"
$basePkgs
[1] "stats"     "graphics"  "grDevices" "utils"     "datasets"  "methods"
[7] "base"

R运行时似乎总是可用methods包,但在使用Rscript时不是。我怀疑这是为了提高性能,但除了显而易见的性能提升之外,还有什么实际影响吗?我问这个问题是因为一个有趣的 bug由于methods包的存在或缺失而被触发。


你可以通过在 .Rprofile 文件中添加 library(methods) 来显式加载一个包。 - Carl Witthoft
1
相关的r-devel讨论串:http://r.789695.n4.nabble.com/advise-on-Depends-tp4678930p4679079.html - GSee
5
?Rscript 告诉你为什么省略了 methods 包:"Rscript 的默认设置省略了 methods 包,因为它占据了约 60% 的启动时间。" - Joshua Ulrich
@JoshuaUlrich:谢谢,这解释了“为什么”。我只查阅了man Rscript - krlmlr
5
如果您是一个软件包的开发者,那么在 DESCRIPTION 文件中需要添加 Depends: methods(请参考 Chambers 在 @GSee 引用的讨论中的评论),并且在 NAMESPACE 文件中需要添加 import("methods")。这也许是最佳实践。 - Martin Morgan
Related - Joshua Ulrich
1个回答

24

根据?Rscript,因为“Rscript的默认设置不包括methods包,因为它占用了大约60%的启动时间”,所以该包未被加载。


16
这种微小的加速根本不足以为做一些卑劣的事情提供合理理由。它会导致各种 R 代码在使用 RRscript 运行时出现无法预测的差异。在我的电脑上,使用 echo 7 | R 需要0.15秒,而使用 Rscript -e 7 只需要0.07秒。这样微弱的加速并不值得引起神秘的远程干扰。 - Ken Williams
7
抱歉评论一下一个旧问题和答案,但我组里的三位科学家分享了失去数天时间发现这种行为的恐怖故事,所以我想在谷歌为我找到的第一个适用的SO问题上发表评论。=) 抱歉评论一个旧问题&回答,但我的团队中有3位科学家分享了他们因此浪费了数天时间的恐怖经历,所以我希望能在第一个相关的Stack Overflow问题上留下评论。 =) - Ken Williams

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接