在Windows中使用system()
从R调用名为molconvert的命令行程序时遇到一些问题。 molconvert位于"C:\Program Files\ChemAxon\MarvinBeans\bin"
然后,我想调用system()
或shell()
来模仿我将通过输入
molconvert pdb "C:\molecule conversions\cembrene A.mol"
在命令提示符处并将结果输出收回到R,如
out=system(...,intern=T)
我似乎遇到了反斜杠和路径中的空格。 我试过
dirmolconvert="C:\\Program Files\\ChemAxon\\MarvinBeans\\bin"
shell(shQuote(paste(dirmolconvert,"\\molconvert pdb "C:\\cembrene A.mol",sep="")))
但是这给了我“错误:......中的意外符号”并且逃避“也没有帮助。有关我应该如何解决这个问题的任何想法?
或
system(paste(dirmolconvert,"\\molconvert pdb \"C:\\cembrene A.mol\"",sep=""), intern=T)
但是这给了我
'C:\Program' not found
有什么想法吗?
编辑: 基于下面的答案,正确的方法显然是
inputdir="C:/Users/Ento/Documents/GCMS/molconvert test"
molconvertdir="C:/Program Files/ChemAxon/MarvinBeans/bin"
molecule="cembrene A.mol"
out=system(paste(shQuote(file.path(molconvertdir, "molconvert.bat")),
"pdb",
shQuote(file.path(inputdir,molecule))),intern=T)
答案 0 :(得分:2)
您希望使用shQuote
引用可执行文件的路径,而不是整个命令行。根据您的molconvert程序所期望的内容,您可能还需要引用作为其参数的路径。
system(paste(shQuote(file.path(dirmolconvert, "molconvert.exe")),
"pdb",
shQuote("C:\\molecule conversions\\cembrene A.mol"))
答案 1 :(得分:0)
解决此问题的最简单方法是使用短路径:
for %%a in ("C:\molecule conversions\cembrene A.mol") set "sh_path=%%~dpfnxsa"
或
for %%a in ("C:\Program Files\ChemAxon\MarvinBeans\bin") do set "pf_sh_path=%%~dpfnxsa"
然后将%sh_path%
和%pf_sh_path%
作为参数传递。