我正在 R 脚本内运行 GCMS 软件 AMDIS 来分析 GCMS 数据。基本语法是:
system("AMDIS_PATH GCMS_FILE_PATH /S /GC /GE /E"
“/S /GC /GE /E”指的是 AMDIS 程序中的功能。
我想让代码“万无一失”,所以我允许路径带有“/”而不是“\”。我还允许路径中存在空格,用
shQuote(..., type = "cmd")
转义它们
这意味着完整的代码如下
system(paste(shQuote(gsub("/", "\\", AMDIS_PATH, fixed = T), type = 'cmd'), shQuote(gsub("/", "\\", GCMS_FILE_PATH, fixed = T), type = 'cmd'), "/S /GD /GS /E"))
这段代码不起作用(输出= 65535),但有一个问题:
如果我从 GCMS_FILE_PATH 中删除 shQuotes。然后一切都会正常工作(只要 FILE_PATH 不包含任何空格)。 所以执行这样的代码确实有效:
system(paste(shQuote(gsub("/", "\\", AMDIS_PATH, fixed = T), type = 'cmd'), gsub("/", "\\", GCMS_FILE_PATH, fixed = T), "/S /GD /GS /E"))
知道为什么 shQuote 对于 AMDIS_PATH 工作得很好,但对于 GCMS_FILE_PATH 却不行吗?我如何运行我的代码并仍然转义 GCMS_FILE_PATH 中的空格?
如果没有可重现的示例,很难说出这里发生了什么,但请注意
?system
说:
在 Windows 上,系统不使用 shell,并且有一个单独的功能 shell 将命令行传递给 shell。
因此使用
type = 'cmd'
可能 进行转义可能根本不合适,请考虑使用 system2
代替。
您的问题可能在于您期望
system
做什么,或者您期望 shQuote
做什么。您可以通过将 system
替换为 cat
来轻松理清这两者以进行调试。