ral*_*lph 5 r package-management renv
我和我的同事正在 RStudio 中使用 Bookdown 编写一本书。由于我使用 ggplot 创建了很多图形,因此对其他软件包(ggplot、ggforce、gganimate 等)有很多依赖项,因此我在本书的过程中添加了 renv 来负责软件包管理。全新安装 Windows 后,我现在再次设置项目时遇到问题,因为有从 R 到版本 3.6.3 的更新并使用了软件包。
renv 项目的初始状态是 R,版本为 3.6.2,我重新安装了它。打开项目后,我运行renv::restore()以恢复所有包的环境。目前只有 nloptr 包(版本 1.2.1)有一个 bug,因为它必须从源代码构建包。
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
Run Code Online (Sandbox Code Playgroud)
为了解决此错误,我通过以下方式手动安装该软件包:
packageurl <- "https://cran.r-project.org/bin/windows/contrib/3.7/nloptr_1.2.1.zip"
install.packages(packageurl, repos=NULL, type="binary")
Run Code Online (Sandbox Code Playgroud)
之后,所有软件包都可以安装,但现在,其中许多软件包都会显示警告package 'X' was built under R version 3.6.3。
如果renv无法恢复原始状态,因为所有软件包都已因 R 更新而更改,那么它还有什么意义呢?如何正确管理 R 项目?
这里的根本问题是nloptr最近更新到版本 1.2.2.1,因此 1.2.1 的二进制文件在 CRAN 上不再可用。
那么,最简单的解决方案就是升级到最新版本的nloptr,以便您可以访问较新的二进制文件。或者,您可以使用锁定到该特定时间点的检查点MRAN存储库,以便可以提供当天可用的二进制文件。
如果您希望能够nloptr从源安装,您可以考虑升级到renv. 您可以使用它从源renv::equip()下载编译所需的必要库nloptr(以及其他一些 R 包)。例如:
> 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'
Run Code Online (Sandbox Code Playgroud)
您可以安装开发版本renv:
renv::upgrade(version = "master")
Run Code Online (Sandbox Code Playgroud)
确保更新后重新启动 R 会话renv。