编辑:我正在通过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。
答案 0 :(得分:0)
运行Genepop程序时是否有指定文件的选项?您可以使用paste
或sprintf
构建命令行,然后传递给system
。
您的命令可能更像是:
shell( paste( first_line, data_file ) )
可能有效的另一个选项是使用pipe
函数打开程序的管道,然后您可以使用管道向程序发送信息。一般情况下,这只能以一种方式工作,你需要准确地知道程序所期望的内容,顺序,时间等等,然后发送这些字符串。
答案 1 :(得分:0)
尝试以交互方式控制这样的程序并不是一个好主意,幸运的是,您似乎不必处理这个问题。 Genepop程序还将采用设置文本文件,您可以在其中指定要运行的所有命令和选项。然后你可以运行
Genepop settingsFile=SampleSettings.txt
运行文件中的命令。其中一个选项是GenepopInputFile
,您可以在其中指定输入数据文件,而不是尝试将其发送到shell。您可以先在R中动态构建设置文件,然后在调用Genepop之前将其写入文件。
此信息来自Genepop Documentation。我建议你进一步阅读以了解与该计划互动的最佳方式。