R Studio 1.1.456(Windows):为什么有时我必须安装二进制软件包而不是从源代码安装?

时间:2018-08-06 09:36:19

标签: r shiny rstudio install.packages

我之所以问这个问题,是因为我最近解决了安装R Shiny的问题(​​请参阅下文)。但是,我发现的答案没有详细说明为什么发生此问题,我真的很想了解以提高对R的了解以及为什么会发生这些事情。

因此,我在RStudio中安装Shiny的尝​​试失败,并且我相信这些是重要的错误消息:

    Error in loadNamespace(i, c(lib.loc, .libPaths()), versionCheck = vI[[i]]) : 
  namespace 'httpuv' 1.3.3 is being loaded, but >= 1.4.3 is required
ERROR: lazy loading failed for package 'shiny'
* removing 'C:/Program Files/R/R-3.2.2/library/shiny'
* restoring previous 'C:/Program Files/R/R-3.2.2/library/shiny'
Warning in install.packages :
  running command '"C:/PROGRA~1/R/R-32~1.2/bin/x64/R" CMD INSTALL -l "C:\Program Files\R\R-3.2.2\library" C:\Users\Sam\AppData\Local\Temp\RtmpuI3XHe/downloaded_packages/shiny_1.1.0.tar.gz' had status 1
Warning in install.packages :
  installation of package ‘shiny’ had non-zero exit status

我先经过通常的过程来找到解决方案。

  • 检查我的RStudio是最新的
  • 检查并安装了软件包更新

在我尝试过的其他解决方案中:

  • 直接从R Studio界面下载软件包
  • 使用devtools从Github安装Shiny
  • 使用install.packages("shiny", dependencies=TRUE)

这些解决方案都不起作用,我相信这与依赖项httpuv有关,但我不确定为什么。

所以最后我可以使用的代码是:install.packages('shiny', type = "binary"),这使我开始使用Shiny。

尽管我可以很轻松地找到解决此问题的方法,但我非常感谢有人抽出一些时间来解释为什么我在Windows中使用RStudio版本(版本1.1.456)无法做到这一点”不支持Shiny的源软件包,以及为什么安装二进制软件包有效。我讨厌解决一个问题,但对它的理解却为零。

R版本3.2.2

谢谢。

1 个答案:

答案 0 :(得分:7)

二进制和源代码选项和发行版

您正在经历新旧代码与R环境依赖项之间的推拉摩擦。现实是您必须在稳定与进步之间做出选择。两者都很难。

考虑:

  • 您正在以二进制形式运行R版本3.2.2,该R版本已于2015年8月15日发布。但是,您正在尝试安装最新的源代码版本Shiny。

    • 您使用的软件包源代码版本和R版本之间存在3年的差异。软件包代码和R环境源代码已经发展。

    • 从那时起到现在,在编译和源代码环境中发生了许多更改。

这样想。

  • 二进制包映像是编译时的编译和源代码环境假设的快照。如果下载当前源代码映像,则使用的是当前代码环境的快照( Now ),其中实际上包括对源代码文件和编译环境中的假设和依赖项的数千个小增量更改。如果您查看闪亮的包装说明,则会注意到:

    • Shiny取决于httpuv,后者取决于Rcpp
    • httpuv建立在libuvhttp-parser C库的基础上。

      • 要使httpuv从源代码进行编译,您需要匹配R环境,依赖库和源依赖文件,手动。不小的壮举。
    • 从源代码(github)编译上述软件包的情况很可能会使用Devtools,如果您以二进制形式下载,则该版本是在 R 3.2.5版下编译的。

更改,假设和相互依赖关系导致复杂的backport编译情况。因此,二进制软件包快照的优势。

选项:

在这种情况下,通常有两个选择。您可以:

  1. 下载与您的R版本和环境匹配的旧版本。

    • 这种方法的缺点是您无法访问当前的软件包功能。
    • 好处是程序包和R环境符合历史背景。
  2. 升级到当前的R环境

    • 这种方法的缺点是您必须顺应R版本。
    • 好处是您可以访问当前源代码中提供的最新软件包功能。

解决方案选项:

如何执行以上操作?在第一种情况下,您可以使用devtools::install_git并提取包的特定分支或版本的源代码并进行编译。在第二步中,您可以升级您的环境,然后拉并升级您的软件包。

如果要使用特定的R环境版本,则必须使用二进制版本。为什么?这些将符合R环境版本编码环境的假设。

这是一个经典问题,突出了当前代码和旧代码之间的推挽。您必须在稳定与进步之间做出选择。两者都很难。

我希望以上内容可以帮助解释这种情况。