我想批量运行R代码并等待用户输入

时间:2013-11-06 16:44:57

标签: r batch-file input

我想批量运行程序,我希望它等待程序中的用户输入。

这就是我所拥有的:

library('XLConnect')
FolderPath<-"C:/Documents/Testing/"
load(paste('C:/Documents/Testing/Program.ml',sep=''));Run()

此代码名为Test.R,它调用一个编译文件,该文件运行的函数可以满足我的需要。我需要在本练习中有一些输入,所以我想要求用户输入一些日期。

程序应该做这样的事情:

What are the years for this simulation?

然后用户输入:

>2001, 2002, 2003, 2004

程序会将此向量保存在变量中,让我们调用y。
然后,当我加载编译的函数时,我将使用y。
问题是我在cmd批处理中运行这个R代码。

3 个答案:

答案 0 :(得分:1)

Yukio,尝试使用函数readline(文档here),如下例所示,其中用户输入两年用逗号分隔。

> years = readline('What are the years for this simulation? ')
What are the years for this simulation? 2001, 2002
> years = as.numeric(unlist(strsplit(years, ",")))
> years
[1] 2001 2002

顺便说一下,你的英语很棒!

答案 1 :(得分:1)

据我了解(如果这是错误的话请有人纠正我),但是在使用R CMD BATCH执行脚本时,您无法在命令行向用户发送消息(它将所有输入和输出写入.Rout文件)。但是使用Rscript.exe执行脚本实际上允许您将内容发送到stdout。但是,为了在使用Rscript.exe执行时从用户那里获得输入,您需要使用file('stdin')作为输入函数的连接,如果您尝试运行R解释器中带有source函数的脚本。下面是一个示例,向您展示如何提示用户输入一系列逗号分隔年份,无论脚本是以Rscript.exe还是以source功能在交互模式下运行。

con <- if (interactive()) stdin() else file('stdin')
message('what are the years')
years <- scan(file=con, sep=',', nlines=1, quiet=TRUE)
print(years)

答案 2 :(得分:1)

您可以轻松处理不在R中的批处理文件中的用户输入。 您可以创建批处理文件,例如launcher.bat,例如

ECHO I am Rscript launcher
set /p years= What are the years for this simulation?
cd R_SCRIPT_PATH
Rscript youscript.R %years%

用户可以写多年他想要的,它将在变量年份。然后在您的脚本中解析此变量以将其设置为有效的年份列表。