【问题标题】:R Studio 1.1.456 (Windows): Why do I sometimes have to install binary packages instead of installing from the source?R Studio 1.1.456 (Windows):为什么有时我必须安装二进制包而不是从源代码安装?
【发布时间】:2019-01-13 05:37:17
【问题描述】:

我问这个问题是因为我最近解决了安装 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)没有t 支持 Shiny 的源代码包以及为什么安装二进制包有效。我讨厌解决问题但对它的理解为零。

R 版本 3.2.2

谢谢。

【问题讨论】:

  • 对于这样的事情,R 的版本比RStudio 的版本更重要。我不清楚的是,您是否在您说检查并安装软件包更新的部分升级了httpuv。之后的错误/问题是什么?
  • 我的客人是您的 R 版本太旧(2015 年 8 月)导致 shiny 的一些依赖项无法安装。您可以尝试安装最新的RRTools 并再试一次吗?您可以在同一台 PC 上拥有多个 R 版本,并选择在 RStudio 选项中运行哪个版本,因此无需卸载旧版本。 RTools 的安装指南是 here

标签: r shiny rstudio install.packages


【解决方案1】:

二进制与源代码选项和问题

您正在经历新旧代码与 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 下编译的。 em>

这些变化、假设和相互依赖性导致了复杂的反向移植编译情况。因此,二进制包快照的优势。

选项:

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

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

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

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

解决方案选项:

如何做到以上几点?在第一种情况下,您可以使用devtools::install_git 并拉取特定分支或包版本的源代码并编译它。第二种,你可以升级你的环境,然后拉取升级你的包。

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

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

我希望以上内容有助于解释这种情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-01
    • 1970-01-01
    相关资源
    最近更新 更多