如何在命令提示符中获取用户输入并将其传递给 R

Sir*_*ver 4 windows r command-line-arguments

我正在尝试使用

var <- as.numeric(readline(prompt="Enter a number: "))
Run Code Online (Sandbox Code Playgroud)

然后在计算中使用它。

在 RStudio 中运行时工作正常,但我需要能够从 Windows 10 中的命令行传递此输入我正在使用带有单行的批处理文件

Rscript.exe "C:\My Files\R_scripts\my_script.R"
Run Code Online (Sandbox Code Playgroud)

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

jpi*_*sen 8

来自以下文档readline()

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

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

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

下面是更多信息。

1. 使用readLines()

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

例子

readLines()在 R 脚本中使用:

# 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")

Run Code Online (Sandbox Code Playgroud)

调用脚本:

Rscript.exe "some-r-file.R"
Run Code Online (Sandbox Code Playgroud)

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

从 PowerShell 打印屏幕

然后output.txt将包含:

Any text!
Run Code Online (Sandbox Code Playgroud)

2. 使用commandArgs()

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

例子:

commandArgs()在 R 脚本中使用:

Any text!
Run Code Online (Sandbox Code Playgroud)

调用脚本:

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

writeLines(args[[1]], "output.txt")
Run Code Online (Sandbox Code Playgroud)

然后output.txt将包含:

Any text!
Run Code Online (Sandbox Code Playgroud)