新建PC用户后R包更新失败问题求助(附控制台日志)
解决R包更新时因路径空格导致的安装失败问题
我在电脑上创建了一个新用户,下载RStudio后发现部分R包无法更新。以下是更新包时的控制台输出:
install.packages(c("mvtnorm", "tufte"))控制台输出:
有可用的二进制版本,但源代码版本更新: binary source needs_compilation mvtnorm 1.0-6 1.0-7 TRUE tufte 0.2 0.3 FALSE 将安装二进制版本 尝试URL 'https://cran.rstudio.com/bin/windows/contrib/3.4/mvtnorm_1.0-6.zip' 内容类型 'application/zip',大小233316字节(227 KB) 已下载227 KB 包‘mvtnorm’成功解包并通过MD5校验 下载的二进制包位于C:\Users\Home\AppData\Local\Temp\RtmpK2ibnW\downloaded_packages 正在安装源代码包‘tufte’ 尝试URL 'https://cran.rstudio.com/src/contrib/tufte_0.3.tar.gz' 内容类型 'application/x-gzip',大小243288字节(237 KB) 已下载237 KB 'B:\Program' 未被识别为内部或外部命令、可执行程序或批处理文件。 install.packages警告:运行命令'"B:/Program Files/R/R-3.4.2/bin/x64/R" CMD INSTALL -l "B:\Program Files\R\R-3.4.2\library" C:\Users\Home\AppData\Local\Temp\RtmpK2ibnW/downloaded_packages/tufte_0.3.tar.gz'返回状态1 install.packages警告:包‘tufte’安装退出状态非零 下载的源代码包位于‘C:\Users\Home\AppData\Local\Temp\RtmpK2ibnW\downloaded_packages’ 这些包并未完成更新。
从报错里的'B:\Program' 未被识别为内部或外部命令就能直接定位问题:你的R安装路径B:\Program Files\R\R-3.4.2包含空格(Program Files),安装源代码包tufte时系统没能正确解析带空格的路径,把B:\Program当成了单独命令执行,直接导致安装中断。
下面给你几个针对性的解决办法,覆盖临时应急到长期根治:
方案1:临时修复——手动指定带引号的安装路径
直接在install.packages命令里通过cmdargs参数给库路径加上正确引号,确保系统识别完整路径:
install.packages("tufte", type = "source", cmdargs = '--library="B:\\Program Files\\R\\R-3.4.2\\library"')
如果已经下载好tufte_0.3.tar.gz,也可以直接指定本地文件路径安装:
install.packages("C:\\Users\\Home\\AppData\\Local\\Temp\\RtmpK2ibnW\\downloaded_packages\\tufte_0.3.tar.gz", repos = NULL, type = "source", cmdargs = '--library="B:\\Program Files\\R\\R-3.4.2\\library"')
方案2:长期根治——迁移R库到无空格路径
不想每次折腾路径的话,最好把R的默认库目录迁移到无空格位置,比如B:\R\library:
- 先在电脑上创建新的库文件夹,比如
B:\R\library - 打开RStudio,运行以下命令设置默认库路径:
.libPaths("B:\\R\\library")
- 为了让设置永久生效,运行
file.edit("~/.Rprofile")打开R配置文件,把上面的命令添加进去,保存后重启R即可。以后安装包都会默认到这个无空格路径,不会再出现类似问题。
方案3:替代方案——用Windows短路径安装
Windows支持用短路径替代带空格的长路径,比如PROGRA~1就是Program Files的默认短路径。试试用短路径安装:
install.packages("tufte", type = "source", lib = "B:\\PROGRA~1\\R\\R-3.4.2\\library")
(注:如果系统里有Program Files (x86),它的短路径通常是PROGRA~2,不确定的话可以打开命令提示符,输入dir /x B:\查看对应目录的短路径)
另外补充mvtnorm的情况:它需要编译(needs_compilation=TRUE),你当前安装的是二进制版本1.0-6,如果想更新到1.0-7,得先安装Rtools(Windows下专门编译R包的工具),否则只能继续使用现有二进制版本。
内容的提问来源于stack exchange,提问作者Miguel Yurivilca
相关产品推荐
相关产品推荐

