有什么办法在Windows上使它成为Sys.which找到适当的可执行文件?两个重新解决问题的案例:
convert.exe
这是一个Windows程序和ImageMagik程序,但Sys.which只找到一个从来没有想过R的窗口,无论我怎样在我的PATH上安排东西.
tar.exe
与git或mingw等各种东西打包在一起,甚至当我在我的路径中首先使用Rtools和Rbuildtools时,tar
从来没有找到Rtools 的程序,例如从源代码安装包时.
所以,每当我在Windows上时,我都会编写一个调用7-zip的包装器.这不可能做的事情可以吗?
实际上只是添加一个环境变量.Renviron
:TAR=path/to/tar.exe
对于这个install.packages
例子来说工作得很好,我很难记住tar.exe
咬我的地方,但是Josh回答了主要问题convert.exe
.
今年早些时候,我在R-devel问了一个+/-相同的问题.回复中有一个是Henrik Bengtsson,他提供了以下有用的功能:
Sys.which2 <- function(cmd) { stopifnot(length(cmd) == 1) if (.Platform$OS.type == "windows") { suppressWarnings({ pathname <- shell(sprintf("where %s 2> NUL", cmd), intern=TRUE)[1] }) if (!is.na(pathname)) return(setNames(pathname, cmd)) } Sys.which(cmd) } ## Trying out Sys.which & Sys.which2 on my Windows box gives the following: Sys.which("convert") # convert # "C:\\Windows\\system32\\convert.exe" Sys.which2("convert") # convert # "C:\\Program Files\\ImageMagick-6.8.8-Q16\\convert.exe"
我真的不确定为什么R-core不仅修复Sys.which()
它使它实际上是可移植的,但它们至少会记录这种行为的根本原因?system
(其功能受同一问题的影响):
"命令"的搜索路径可能与系统有关:它将包含"桶"目录,工作目录和"PATH"之前的Windows系统目录.