1

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

这就是我所拥有的:

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 代码。

4

3 回答 3

1

据我了解(如果这是错误的,请有人纠正我),但是在使用 R CMD BATCH 执行脚本时,您无法在命令行向用户发送消息(它将所有输入和输出写入 .Rout 文件)。但是使用 Rscript.exe 执行脚本实际上确实可以让您将内容发送到标准输出。但是,为了在使用 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)
于 2013-11-06T17:13:26.357 回答
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%

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

于 2013-11-06T17:21:01.493 回答
1

Yukio,尝试以下示例中的函数readline此处的文档),其中用户输入以逗号分隔的两年。

> 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

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

于 2013-11-06T16:59:26.063 回答