我可以使用R与Windows控制台程序进行交互

时间:2014-06-25 21:54:53

标签: r shell

编辑:我正在通过Genepop设置文件解决这个问题,但我也对这个问题的一般问题感兴趣,我可以用R?与

的Windows控制台程序进行交互吗? >

我想通过从R向Windows控制台发出命令来自动使用遗传分析程序Genepop。打开程序是微不足道的,但我不知道是否可以输入开盘后的下一个连续线。我需要做的第一件事是输入一个文本文件。如果我可以传递任何小的简单字符串,我会知道我是否能得到一条消息,告诉我我可以工作。

> shell(".../Genepop.exe")
Genepop version 4.2.2

Unable to open file genepop.txt
Unable to open file genepop.txt
Genepop version 4.2.2


Name of the data file ? (press ENTER to quit)
>

如果我只是在没有要求R中的下一行的情况下打开程序,它将退出。几乎我的预期。然后我尝试使用分号,就像命令争论的shell帮助文件中提到的那样。

  

...所以命令   可以是shell认为可执行的任何东西,包括shell   脚本,它可以包含由;。

分隔的多个命令

但这似乎没有帮助。

>first_line <- paste(genepopDir, genepopFile, sep = "/")
>data_file <- "genepopInput"
>test <- paste(first_line,data_file, sep = ";")
>shell(test)
Genepop version 4.2.2

Unable to open file genepop.txt
Unable to open file genepop.txt

Reading settings file cmdline.txt...
Genepop version 4.2.2


Name of the data file ? (press ENTER to quit)

所以也许我可以使用角色向量?输入参数下面有一些文档暗示我这是我应该尝试的。

> test <- c(first_line, data_file)
> shell(test)
Error in system(command, as.integer(flag), f, stdout, stderr) : 
  character string expected as first argument

我使用的是R 3.1,Windows 7,x86。

2 个答案:

答案 0 :(得分:0)

运行Genepop程序时是否有指定文件的选项?您可以使用pastesprintf构建命令行,然后传递给system

您的命令可能更像是:

shell( paste( first_line, data_file ) )

可能有效的另一个选项是使用pipe函数打开程序的管道,然后您可以使用管道向程序发送信息。一般情况下,这只能以一种方式工作,你需要准确地知道程序所期望的内容,顺序,时间等等,然后发送这些字符串。

答案 1 :(得分:0)

尝试以交互方式控制这样的程序并不是一个好主意,幸运的是,您似乎不必处理这个问题。 Genepop程序还将采用设置文本文件,您可以在其中指定要运行的所有命令和选项。然后你可以运行

Genepop settingsFile=SampleSettings.txt

运行文件中的命令。其中一个选项是GenepopInputFile,您可以在其中指定输入数据文件,而不是尝试将其发送到shell。您可以先在R中动态构建设置文件,然后在调用Genepop之前将其写入文件。

此信息来自Genepop Documentation。我建议你进一步阅读以了解与该计划互动的最佳方式。