经常更新R包是不错的做法?

wis*_*ame 11 r

我刚刚开始使用R,并且不确定多久更新已安装的软件包(此时,我主要使用的是ggplot2和拨浪鼓).一方面,这是拥有最新版本的典型极客冲动:-)另一方面,更新可能会破坏功能,作为R初学者,我不想浪费时间研究包不兼容性并重新安装库,这几乎可以肯定我没有注意到改进的包装有任何区别.

对于其他应用程序,我从根据升级频率,升级版本和安装等等之间的经验开发出来.但就R而言,我处在黑暗中

并且要明确:我不是在讨论R本身,而是在讨论它的库.

谢谢.

Vin*_*nce 16

这是我的理念:天真的用户永远不会更新.老练的用户总是会更新.高级用户经常更新,但要小心.

无意识更新并不总是有益的.错误在R库的更新版本(或R本身!)中发挥作用,您可以通过更新来破坏现有代码,而无需读取更改日志或提交历史记录.例如,R 2.11 lme4在OS X上爆发......在版本之间仔细更新和运行包的演示是值得的.更新到新的库或R版本并且在截止日期之前发现了一些事情,这真的很糟糕.

  • @Dirk Eddelbuettel:Dirk,有时候你买不起.前一段时间我更新了一些软件包,一切似乎都运行良好.然后我的老板让我分析一些新数据,所以我打开了一个用于此任务的R脚本,它不再工作了.问题出在我更新的一个软件包(`tcltk`)上.我设法在没有该脚本的情况下分析数据,但仍然很烦人.我更喜欢"经常更新,如果你不是在分析论文的数据"那种人. (7认同)
  • 让我知道你在哪里停放时间机器,告诉你事先安装了什么会破坏你的包裹. (4认同)
  • 你们让我大吃一惊.曾经发生过"早发布,经常发布"的事情?作为一名CRAN作者,我对此感到震惊.哦,好吧,chacun儿子痛风. (3认同)
  • 它被称为谷歌.除非每个人在同一时间更新R(或包)的最新版本,否则有人可能遇到问题并将其发送到R邮件列表.意识到问题有帮助.我真的不知道Googling如何在更新之前发布/发布或查看更改日志是一种不好的做法. (2认同)
  • 此外,一次只升级一个或几个包.如果你刚刚更新了50个软件包并且某些东西不能正常工作(不是不可能,只是更难),那么就很难找到bug的来源. (2认同)

Dir*_*tel 12

是的.

为什么你想要坚持旧的错误和缺乏功能?

  • CRAN经过了严格的测试.你可以相信它.这是它成功的原因之一. (6认同)
  • @Dirk:虽然我同意你的回答,但我还要补充一点,CRAN的测试主要是针对包的格式/结构(应该捕获操作系统问题等); 它不会(它不能)强制执行有关内容的任何内容.实际上测试属于软件包作者,并且存在大量的可变性. (6认同)
  • 实际上,如果他们处于项目中间,我会非常故意不定期更新.更改R或包的版本可能会导致冲突的结果.请注意,当有一个明显的错误(例如几年前的gcrma)时,情况并非如此,但是在项目期间需要保持环境稳定. (4认同)
  • 问题不是R,所以让我们留在这里的主题.但在这种背景下,我注意到R Core的绝望,他提供了alpha,beta和rc版本 - 这似乎没有人愿意接触.然而,一旦.0版本发布,每个人都会涌入并抱怨错误.我觉得人们想要吃他们的蛋糕并拥有它:免费的开源软件,没有错误,但坚持不参与发现错误.看到这里的问题? (3认同)

Ite*_*tor 5

问题已经回答了,但我会提供2美分.在组织中,更新R应该被视为更新gccJava:带警告,临时区域,回滚计划等.其他人的工作和结果可能会受到影响.[见更新#2]

我对更新R包更加冲动.只要您可以在任何时间点重现系统状态,就不用担心了.确保夜间备份应该是您的系统管理员的域.

基本的想法是你应该能够重现一切.实际测试您的早期结果是否被复制取决于您是否想要反驳您的假设,即没有错误或更改会影响以后的结果.:)


更新1.正如在评论及上文中所提到的,在生产环境或任何稳定性最佳的环境中进行更新(例如,错误已知或不重要),引入新错误,新依赖关系,不同输出或任何其他类型软件回归,应该非常谨慎.而且,你在很多事情上都要更新.从R-Forge更新更有可能让您暴露于最新的错误,而不是CRAN.即便如此,我已经发现并报告了CRAN上3个版本的软件包持续存在的错误,以及其他神奇地出现过的回归.我测试了很多,但更新,发现新的错误和调试是我并不总是想(或有时间)进行的努力.

在我使用了很多的新版本的软件包中找到一个新的bug后,我想起了这个问题.为了检查,我恢复了早期的版本 - 没有更多的崩溃,虽然追查原因花了几个小时,因为我认为这不是在这个包中产生的.我会不久向维护者发送一个注释,以便其他人不必偶然发现同一个bug.

更新2.在一个组织中,我不得不说答案是否定的.实际上,在任何可能存在两个或更多R的并发实例的情况下,盲目地更新包而另一个可能正在使用它们是非常不明智的.热插拔包可能有很好的方法,我还不知道.请记住,这两个实例只需要共享库(即存储包的位置),而AFAIK不需要在同一台机器上同时运行.因此,如果将库放在共享系统上,例如通过NFS,则可能无法使用这些库知道R在哪里同时运行.意外杀死另一个R进程通常不是一件好事.