R 3.5版本无法移动临时安装文件问题求解决方案
解决R 3.5中install.packages无法移动临时安装文件的问题
我之前也碰到过这个糟心的问题,尤其是在R 3.5版本里,原来针对旧版本的Trace(utils:::unpackPkgZip, edit=TRUE)修复方法因为没了sys.time选项彻底失效了。结合自己踩过的坑,给你几个亲测有效的适配R 3.5的解决方案:
方案一:改用本地临时目录(最推荐)
这个问题本质上大多是网络共享目录的文件系统延迟导致的——R刚解压完临时文件就想移动,系统还没来得及释放文件锁。换成本地临时目录就能避开这个问题:
- 先查看当前R使用的临时目录:
tempdir() - 设置一个本地的临时文件夹(比如C盘下的专属目录,路径可以自己调整):
# 先创建目录(如果不存在的话) dir.create("C:/Temp/R_Temp", recursive = TRUE, showWarnings = FALSE) # 设置环境变量指向这个本地目录 Sys.setenv(TMP = "C:/Temp/R_Temp") Sys.setenv(TMPDIR = "C:/Temp/R_Temp") - 之后再运行安装命令:
install.packages("fields")
方案二:手动下载+本地安装
如果临时目录改不了,也可以先把包下载到本地,再手动安装:
- 下载包到本地指定目录(比如C盘的R_Packages文件夹):
dir.create("C:/Temp/R_Packages", recursive = TRUE, showWarnings = FALSE) install.packages("fields", destdir = "C:/Temp/R_Packages", type = "binary") - 找到下载好的zip包(文件名类似
fields_12.6.zip,版本号可能不同),手动从本地安装:install.packages("C:/Temp/R_Packages/fields_12.6.zip", repos = NULL, type = "binary")
方案三:修改unpackPkgZip函数添加延迟
如果不想换目录,也可以给解压后的移动操作加个短暂延迟,让系统有时间释放文件锁:
- 先查看
utils:::unpackPkgZip的原代码,复制全部内容 - 在代码中找到移动临时目录到目标目录的代码段(通常是
file.copy或file.rename的调用),在前面添加Sys.sleep(1)(如果网络慢可以改成2-3秒) - 重新定义这个函数,比如:
unpackPkgZip <- function (zipname, pkgname, lib, keep = FALSE, quiet = FALSE) { # 粘贴原函数的全部代码 # ...(省略原代码内容) # 找到移动目录的那一行,添加延迟 Sys.sleep(1) success <- file.copy(from = tmpdir, to = target, recursive = TRUE) # ...(继续原代码内容) } - 定义完函数后,再运行
install.packages("fields")即可
内容的提问来源于stack exchange,提问作者Eliseo Di Folco
相关产品推荐
相关产品推荐

