4

我和我的同事正在用 RStudio 中的 Bookdown 编写一本书。由于我使用 ggplot 创建了很多图形,因此我对其他包(ggplot、ggforce、gganimate...)有很多依赖关系,因此我在本书的过程中添加了 renv 来处理包管理。在全新安装我的 Windows 之后,我现在确实无法再次设置项目,因为从 R 到版本 3.6.3 的更新和使用的软件包。

带有 renv 的项目的初始状态是版本为 3.6.2 的 R,我重新安装了它。打开项目后,我运行renv::restore()以使用所有包恢复环境。目前只有包 nloptr(版本 1.2.1)有错误,因为它必须从源代码构建包。

Installing minqa [1.2.4] ...
    OK (linked cache)
Installing nloptr [1.2.1] ...
    FAILED
Error installing package 'nloptr':
==================================

* installing *source* package 'nloptr' ...
** package 'nloptr' successfully unpacked and MD5 sums checked
** using staged installation

   **********************************************
   WARNING: this package has a configure script
         It probably needs manual configuration
   **********************************************


** libs
C:/Rtools/mingw_64/bin/g++ -std=gnu++11  -I"C:/PROGRA~1/R/R-36~1.2/include" -DNDEBUG          -O2 -Wall  -mtune=generic -c dummy.cpp -o dummy.o
C:/Rtools/mingw_64/bin/gcc  -I"C:/PROGRA~1/R/R-36~1.2/include" -DNDEBUG       -I"/x64/include"   -O2 -Wall  -std=gnu99 -mtune=generic -c init_nloptr.c -o init_nloptr.o
init_nloptr.c:35:19: fatal error: nlopt.h: No such file or directory
 #include "nlopt.h"
                   ^
compilation terminated.
make: *** [C:/PROGRA~1/R/R-36~1.2/etc/x64/Makeconf:208: init_nloptr.o] Error 1
ERROR: compilation failed for package 'nloptr'
* removing 'C:/Users/Ralph/DOCUME~1/ML2/ml2-buch/renv/staging/1/nloptr'
Fehler: install of package 'nloptr' failed

要解决此错误,我通过以下方式手动安装软件包:

packageurl <- "https://cran.r-project.org/bin/windows/contrib/3.7/nloptr_1.2.1.zip"
install.packages(packageurl, repos=NULL, type="binary")

之后可以安装所有软件包,但现在,其中许多都显示警告package 'X' was built under R version 3.6.3

如果renv无法恢复原始状态,那么它有什么意义,因为所有包都已被 R 的更新更改?如何正确管理 R 项目?

4

1 回答 1

3

这里的根本问题nloptr是最近更新到版本 1.2.2.1,因此 CRAN 上不再提供 1.2.1 的二进制文件。

那么,最简​​单的解决方案是升级到最新版本nloptr,以便您可以访问更新的二进制文件。或者,您可以使用锁定到该特定时间点的检查点MRAN存储库,以便可以提供当天可用的二进制文件。

如果您希望能够nloptr从源安装,您可以考虑升级到renv. 您可以使用从源代码中下载编译(和其他一些 R 包)renv::equip()所需的库。nloptr例如:

> renv::equip()
The following external software tools will be installed:

    curl-7.68.0-win32-mingw.zip
    glpk32.zip
    glpk64.zip
    local323.zip
    nlopt-2.4.2.zip
    spatial324.zip

Tools will be installed into '~/AppData/Local/renv/extsoft'.

Do you want to proceed? [y/N]: y
Retrieving 'https://s3.amazonaws.com/rstudio-buildtools/extsoft/curl-7.68.0-win32-mingw.zip' ...
    OK [downloaded 2.9 Mb in 1.5 secs]
Retrieving 'https://s3.amazonaws.com/rstudio-buildtools/extsoft/glpk32.zip' ...
    OK [downloaded 457.7 Kb in 1 secs]
Retrieving 'https://s3.amazonaws.com/rstudio-buildtools/extsoft/glpk64.zip' ...
    OK [downloaded 481.6 Kb in 1 secs]
Retrieving 'https://s3.amazonaws.com/rstudio-buildtools/extsoft/local323.zip' ...
    OK [downloaded 9.6 Mb in 2.3 secs]
Retrieving 'https://s3.amazonaws.com/rstudio-buildtools/extsoft/nlopt-2.4.2.zip' ...
    OK [downloaded 752.6 Kb in 1.2 secs]
Retrieving 'https://s3.amazonaws.com/rstudio-buildtools/extsoft/spatial324.zip' ...
    OK [downloaded 20.9 Mb in 2.6 secs]
* External software successfully updated.
The following entries will be added to ~/.R/Makevars:

    LOCAL_SOFT = C:/Users/kevin/AppData/Local/renv/extsoft
    LIB_XML = C:/Users/kevin/AppData/Local/renv/extsoft
    LOCAL_CPPFLAGS = -I"$(LOCAL_SOFT)/include"
    LOCAL_LIBS = -L"$(LOCAL_SOFT)/lib$(R_ARCH)" -L"$(LOCAL_SOFT)/lib"

These tools will be used when compiling R packages from source.

Do you want to proceed? [y/N]: y
* '~/.R/Makevars' has been updated.

> install.packages("nloptr", type = "source")
* installing *source* package 'nloptr' ...
** package 'nloptr' successfully unpacked and MD5 sums checked
** using staged installation

   **********************************************
   WARNING: this package has a configure script
         It probably needs manual configuration
   **********************************************


** libs

*** arch - i386
c:/Rtools/mingw_32/bin/g++ -std=gnu++11  -I"C:/R/R-36~1.2RC/include" -DNDEBUG     -I"C:/Users/kevin/AppData/Local/renv/extsoft/include"     -g -O2 -Wall -pedantic -c dummy.cpp -o dummy.o
c:/Rtools/mingw_32/bin/gcc  -I"C:/R/R-36~1.2RC/include" -DNDEBUG     -I"C:/Users/kevin/AppData/Local/renv/extsoft/include"  -I"/i386/include"   -g -O3 -Wall -pedantic -c init_nloptr.c -o init_nloptr.o
c:/Rtools/mingw_32/bin/g++ -std=gnu++11 -shared -s -static-libgcc -o nloptr.dll tmp.def dummy.o init_nloptr.o nloptr.o -L/i386/lib -lnlopt_cxx -LC:/Users/kevin/AppData/Local/renv/extsoft/lib/i386 -LC:/Users/kevin/AppData/Local/renv/extsoft/lib -LC:/R/R-36~1.2RC/bin/i386 -lR
installing to C:/Users/kevin/R/win-library/3.6/00LOCK-nloptr/00new/nloptr/libs/i386

*** arch - x64
c:/Rtools/mingw_64/bin/g++ -std=gnu++11  -I"C:/R/R-36~1.2RC/include" -DNDEBUG     -I"C:/Users/kevin/AppData/Local/renv/extsoft/include"     -g -O2 -Wall -pedantic -c dummy.cpp -o dummy.o
c:/Rtools/mingw_64/bin/gcc  -I"C:/R/R-36~1.2RC/include" -DNDEBUG     -I"C:/Users/kevin/AppData/Local/renv/extsoft/include"  -I"/x64/include"   -g -O3 -Wall -pedantic -c init_nloptr.c -o init_nloptr.o
c:/Rtools/mingw_64/bin/g++ -std=gnu++11 -shared -s -static-libgcc -o nloptr.dll tmp.def dummy.o init_nloptr.o nloptr.o -L/x64/lib -lnlopt_cxx -LC:/Users/kevin/AppData/Local/renv/extsoft/lib/x64 -LC:/Users/kevin/AppData/Local/renv/extsoft/lib -LC:/R/R-36~1.2RC/bin/x64 -lR
installing to C:/Users/kevin/R/win-library/3.6/00LOCK-nloptr/00new/nloptr/libs/x64
** R
** inst
** byte-compile and prepare package for lazy loading
** help
*** installing help indices
  converting help for package 'nloptr'
    finding HTML links ... done
    auglag                                  html  
    bobyqa                                  html  
    ccsaq                                   html  
    check.derivatives                       html  
    cobyla                                  html  
    crs2lm                                  html  
    direct                                  html  
    is.nloptr                               html  
    isres                                   html  
    lbfgs                                   html  
    mlsl                                    html  
    mma                                     html  
    neldermead                              html  
    newuoa                                  html  
    nl.grad                                 html  
    nl.opts                                 html  
    nloptr-package                          html  
    nloptr                                  html  
    nloptr.get.default.options              html  
    nloptr.print.options                    html  
    print.nloptr                            html  
    sbplx                                   html  
    slsqp                                   html  
    stogo                                   html  
    tnewton                                 html  
    varmetric                               html  
** building package indices
** installing vignettes
** testing if installed package can be loaded from temporary location
*** arch - i386
*** arch - x64
** testing if installed package can be loaded from final location
*** arch - i386
*** arch - x64
** testing if installed package keeps a record of temporary installation path
* DONE (nloptr)

The downloaded source packages are in
    'C:\Users\kevin\AppData\Local\Temp\RtmpW4Mr1M\downloaded_packages'

您可以安装以下开发版本renv

renv::upgrade(version = "master")

确保在更新后重新启动 R 会话renv

于 2020-03-19T05:09:39.050 回答