在 R 3.4.0 中从二进制文件安装软件包



我最近将R更新到最新版本:3.4.0。R 安装在网络位置H:/上。现在,当我尝试安装本地二进制包时,发生了一些奇怪的事情:

filename <- paste0("R:/path/independeR_", versions, ".zip")
install.packages(filename,
repos = NULL, type = "source",
lib = gsub("\\\\networkpath/home/[[:alpha:]]*/",
"H:/", .libPaths()[1]))

H:/R:/都是网络位置。在.libPaths()中,默认位置位于H:/位置,但它显示整个网络地址。在对install.packages的呼吁中,我替换了这个。

上面的代码失败,输出如下:

'\networkpathhomeJDUB~PN6DOCU~UZLRR-34~TN4.0' is not recognized as an internal or external command,
operable program or batch file.
Warning in install.packages :
running command '"//networkpath/home/JDUB~PN6/DOCU~UZL/R/R-34~TN4.0/bin/x64/R" CMD INSTALL -l "H:DocumentsRR-3.4.0library" "R:/path/independeR_0.1.8.zip"' had status 1
Warning in install.packages :
installation of package ‘R:/path/independeR_0.1.8.zip’ had non-zero exit status

这里有两件事让我感到惊讶。目录名都是混乱的(DOCU~UZL而不是Documents等),但由于某种原因,命令promt似乎很好。更有趣的是:

当我尝试将命令"//networkpath/home/JDUB~PN6/DOCU~UZL/R/R-34~TN4.0/bin/x64/R" CMD INSTALL -l "H:DocumentsRR-3.4.0library" "R:/path/independeR_0.1.8.zip"直接放入命令提示符时,输出非常相似:

C:Usersjdubbeldam>"//networkpath/home/JDUB~PN6/DOCU~UZL/R/R-34~TN4.0/b
in/x64/R" CMD INSTALL -l "H:DocumentsRR-3.4.0library" "R:/path/independeR_0.1.8.zip"
'\networkpathhomeJDUB~PN6DOCU~UZLRR-34~TN4.0' is not recognized as
an internal or external command,
operable program or batch file.

出于某种原因,CMD似乎中途切断了命令的路径。我想这是因为命令太长了。当我尝试相同的命令时,但使用H:/Documents/R/R-3.4.0/bin/x64/R,安装正常。

我希望能够从脚本自动安装此包,因此我想从 R 中解决此问题。有没有办法让R使用较短的H:/Documents/R/R-3.4.0/bin/x64/R

我在更新软件包时遇到问题,在搜索时发现有一个报告的错误影响从 Windows 10 中的文件获取时间戳: https://bugs.r-project.org/bugzilla3/show_bug.cgi?id=17261

从 R 3.4.0 开始,file.info有时会返回 mtime, 目录的 atime 和 ctime。 似乎有事可做 与分享。 这会影响使用 file.mtime 的函数,例如 更新包。

繁殖:

尝试使用随机目录 file.info()。 如果它返回合法的 文件时间,打开 Windows 资源管理器窗口并导航到 目录,然后再次运行调用,它将返回 s。

在某些情况下,即使目录未打开(或 在打开的资源管理器窗口的路径中),但这并不一致。

托马斯·卡利贝拉的评论:

感谢您的报告,这是一个已修复的已知错误 最近在R-devel

我发现当我关闭文件资源管理器窗口时,时间戳工作正常并且没有显示为 NA。
这可能是代码无法正常工作的原因。

我设法完成了以下工作。但是,我认为它非常丑陋,并且仍然想看看是否有可能以其他方式做到这一点。

filename <- paste0("R:/path/independeR_", versions, ".zip")
cmd <- file.path(gsub("//networkpath/home/[[:alnum:]]*/", "H:/",
gsub("//networkpath/home/[[:alnum:]]*~[[:alnum:]]*/",
"H:/", R.home())), "bin/x64/R")
libname <- gsub("\\\\networkpath/home/[[:alpha:]]*/",
"H:/", .libPaths()[1])
call <- paste(paste0('"', cmd, '"'), 
"CMD", 
"INSTALL", 
"-l", 
paste0('"', libname, '"'), 
"--no-lock",
paste0('"', filename, '"'), 
sep = " ")
system(call)

最新更新