【问题标题】:How to get a user input in command prompt and pass it to R如何在命令提示符下获取用户输入并将其传递给 R
【发布时间】:2026-01-29 09:20:03
【问题描述】:

我正在尝试使用

var <- as.numeric(readline(prompt="Enter a number: "))

然后在计算中使用它。

在 RStudio 中运行时运行良好,但我需要能够从 Windows 10 的命令行传递此输入 我正在使用包含一行的批处理文件

Rscript.exe "C:\My Files\R_scripts\my_script.R"

当它到达用户输入部分时,它会冻结并且不提供预期的输出。

【问题讨论】:

  • readline 仅在单独运行时等待用户输入。您正在运行一个完整的脚本,因此它将一直运行到脚本结束并将NA 分配给var
  • 我想是因为通过 Rscript 执行不会给你一个交互式环境——因为自动化脚本永远不会继续。请参阅?readline 示例的帮助。

标签: r windows command-line-arguments


【解决方案1】:

来自readline()的文档:

这只能在交互式会话中使用。 [...] 在非交互式使用中,结果就像响应是 RETURN 并且值为 ""。

对于非交互式使用 - 从命令行调用 R 时 - 我认为您有两个选择:

  1. 使用readLines(con = "stdin", n = 1) 从终端读取用户输入。
  2. 在调用脚本时,使用commandArgs(trailingOnly = TRUE) 将输入作为参数从命令行提供。

下面是更多信息。

1。使用readLines()

readLines() 看起来与您正在使用的readline() 非常相似,但它旨在逐行读取文件。如果我们不是将文件指向标准输入(con = "stdin"),它将从终端读取用户输入。我们设置了n = 1,这样当你按下回车键时它会停止从命令行读取(也就是说,它只读取一个行)。

示例

在 R 脚本中使用 readLines()

# some-r-file.R

# This is our prompt, since readLines doesn't provide one
cat("Please write something: ")
args <- readLines(con = "stdin", n = 1)

writeLines(args[[1]], "output.txt")

调用脚本:

Rscript.exe "some-r-file.R"

它现在会询问您的输入。这是来自 PowerShell 的屏幕截图,其中我提供了“任何文本!”。

那么 output.txt 将包含:

Any text!

2。使用commandArgs()

从终端调用Rscript.exe 时,您可以添加额外的参数。使用commandArgs(),您可以捕获这些参数并在您的代码中使用它们。

示例:

在 R 脚本中使用 commandArgs()

# some-r-file.R
args <- commandArgs(trailingOnly = TRUE)

writeLines(args[[1]], "output.txt")

调用脚本:

Rscript.exe "some-r-file.R" "Any text!"

那么 output.txt 将包含:

Any text!

【讨论】:

  • 好的。但是我怎样才能让用户得到提示,然后输入一个稍后将使用的值?
  • 我做了更多的研究,并用解决方案更新了我的答案。我认为这应该可以解决您的问题。请告诉我进展如何。
  • 有效!谢谢。
最近更新 更多