问题 如何从R或/和Matlab运行shell脚本?


让我们假设我们有命令 X 可以在shell中执行并在stdout和stderr中返回一些结果。是否可以从R或/和Matlab执行此操作?如果是的话,如何处理命令的结果?


3919
2018-02-21 14:34


起源

这里没有提到Cygwin,也没有提到操作系统 - 尽管这在以后的评论中看起来很重要。 - mdsumner


答案:


您可以使用system()命令在R中执行shellscripts,system-commands等

它记录在 http://cran.r-project.org/doc/manuals/R-lang.html#System-and-foreign-language-interfaces


11
2018-02-21 14:38



我没有找到我想要的信息。也许我不那么专注。但是例如如何通过R :: system执行简单的“ls”(unix)或“dir”(win)命令? - Mihran Hovsepyan
Actualy,我试图调用系统(“ls”),但它抛出“写入错误:错误的文件描述符” - Mihran Hovsepyan
A < - system('ls',intern = TRUE); - Nikolaus Gradwohl
这应该将工作目录的内容分配给vecotr A. - Nikolaus Gradwohl
+1。谢谢@Nikolaus你是对的。但我不知道为什么我不能从我的cygwin运行可执行文件。我得到“/ cygdrive / c / cygwin / bin / ls:写错误:错误的文件描述符”。你能评论一下吗? - Mihran Hovsepyan


根据这个 岗位,您可以使用系统功能从任何操作系统调用任何内容。一个例子是 [status, result] = system(’dir’);,打电话给 dir 在类UNIX操作系统上执行命令。

MathWorks文档

system('command') 呼吁   操作系统运行指定的   命令,例如dir或ls或a   UNIX shell脚本,并指向   输出到MATLAB软件。该   命令在系统shell中执行,   这可能不是来自的shell   你推出了MATLAB。如果命令   运行成功,ans为0.如果   命令失败或不存在   您的操作系统,ans是一个   非零值和解释   消息出现。

[status, result] = system('command')   调用操作系统运行   命令,并将输出定向到   MATLAB。如果命令成功运行,   status为0,结果包含   命令输出。如果命令失败   或在您的经营中不存在   系统,状态是非零值和   结果包含一个解释   信息。

请参阅Michael Katz的博客 这里


5
2018-02-21 14:59



+1为好的解决方案。但这仅适用于matlab( - Mihran Hovsepyan
嗯,是。 Matlab和R是完全不同的。我真的没有经验R. :) - glarrain