You probably already know, but you can at least work around it as: 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) }
(it falls back to Sys.which() if 'where %s' doesn't give anything) > Sys.which2("convert") convert "C:\\Program Files\\ImageMagick-6.8.3-Q16\\convert.exe" > Sys.which("convert") convert "C:\\Windows\\system32\\convert.exe" /Henrik On Mon, May 18, 2015 at 11:08 AM, Yihui Xie <x...@yihui.name> wrote: > +1 I have exactly the same problem. > > Regards, > Yihui > -- > Yihui Xie <xieyi...@gmail.com> > Web: http://yihui.name > > > On Mon, May 18, 2015 at 12:29 PM, Josh O'Brien <joshmobr...@gmail.com> wrote: >> My question: >> >> On Windows, R's system() command prepends several directories to those >> in the Windows Path variable. >> >> >From ?system >> >> The search path for 'command' may be system-dependent: it will >> include the R 'bin' directory, the working directory and the >> Windows system directories before 'PATH'. >> >> This shadows any executables on the Path that share a name with, for >> example, one of the Windows commands. >> >> What should I do when I'd really like (the equivalent of) a call >> passed to system() that would be executed using the same Path that >> you'd get if working directly at the Windows command line? Is there a >> recommended workaround for situtations like this? (It _seems_ like it >> would be handy if system() et al. included an additional argument that >> optionally disabled the prepending of those extra directories, to give >> Windows users full control of the path seen by system(). Would adding >> such an argument have undesirable ramifications?) >> >> >> Motivation and reproducible example: >> >> I'm motivated here by a desire to use the function plotdiff() from >> Paul Murrell's gridGraphics package on my Windows laptop. Getting >> that to work will require a few code fixes, of which the masking of >> ImageMagick's convert.exe by that in the C:/Windows/System32 seems to >> be the most challenging. plotdiff() relies on system2() calls to >> ImageMagick's 'convert' function, as well as a call to >> Sys.which(c("convert", "compare")) that tests for the presence of >> ImageMagick on the Path. Even if ImageMagick is placed early on the >> Path, though, both calls to Sys.which() and system2() find Windows' >> convert command (which "Converts FAT volumes to NTFS") rather than >> ImageMagick's convert. >> >> >> Here's a reproducible example that shows what I'm seeing: >> >> ## In R, make a pdf >> pdf("a.pdf") >> plot(rnorm(99), col="red") >> dev.off() >> >> ## At Windows cmd command line >> where convert >> ## C:\Program Files\ImageMagick-6.8.8-Q16\convert.exe >> ## C:\Windows\System32\convert.exe >> convert -density 100x100 a.pdf a.png >> >> ## From R >> >> ## Unqualified references to convert find the 'wrong' one >> Sys.which("convert") >> ## convert >> ## "C:\\Windows\\system32\\convert.exe" >> system2("convert", "-density 100x100 a.pdf b.png") >> ## Invalid Parameter - 100x100 >> ## Warning message: >> ## running command '"convert" -density 100x100 a.pdf b.png' had status 4 >> >> ## A fully qualified reference does work >> system2("C:/Program Files/ImageMagick-6.8.8-Q16/convert", >> "-density 100x100 a.pdf b.png") >> >> ______________________________________________ >> R-devel@r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-devel > > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel