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

Sam*_*per 17 r rstudio shiny 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
Run Code Online (Sandbox Code Playgroud)

我首先完成了常规流程以找到解决方案.

  • 检查我的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

谢谢.

Tec*_*e01 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下编译的.

更改,假设和相互依赖性构成了复杂的反向编译情况.因此,二进制包快照的优势.

选项:

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

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

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

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

解决方案选项

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

如果您想要处理特定的R环境版本,则必须使用二进制版本.为什么?这些将匹配R环境版本编码环境假设.

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

我希望上面有助于解释这种情况.