【问题标题】:I want to run a R code in batch and wait for user input我想批量运行 R 代码并等待用户输入
【发布时间】:2023-03-26 08:40:01
【问题描述】:

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

这就是我所拥有的:

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

【问题讨论】:

    标签: r batch-file input


    【解决方案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
    

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

    【讨论】:

    • 我试过了,不幸的是 readline() 在批量运行时不起作用。我真的很难完成我的程序的这一部分。感谢赞美!
    • 备案,截至 2021 年 12 月,这仍然不起作用
    【解决方案2】:

    据我了解(如果这是错误的,请有人纠正我),但是在使用 R CMD BATCH 执行脚本时,您无法在命令行向用户发送消息(它将所有输入和输出写入.Rout 文件)。但是使用 Rscript.exe 执行脚本实际上确实可以让您将内容发送到标准输出。但是,为了在使用 Rscript.exe 执行时从用户那里获取输入,您需要使用 file('stdin') 作为输入函数的连接,这很有趣,如果您尝试从具有source 函数的 R 解释器。这是一个示例,向您展示如何提示用户输入一系列逗号分隔的年份,无论脚本是使用 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)
    

    【讨论】:

      【解决方案3】:

      您可以在不在 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%
      

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

      【讨论】:

      • 我觉得这里真的很愚蠢。我不是很明白。我应该如何在我的 R 代码中调用这个 .bat?
      • :) 我使用的是 Rscript 而不是 R CMD BATCH 来启动脚本。也许看看may answer here 可以更好地理解。
      • 嗯...我明白了,但这可能是一个问题,因为整个程序都在使用 CMD BATCH 运行。
      猜你喜欢
      • 1970-01-01
      • 2012-06-12
      • 2016-10-06
      • 1970-01-01
      • 2023-03-31
      • 2021-08-11
      • 1970-01-01
      • 1970-01-01
      • 2019-05-08
      相关资源
      最近更新 更多