我正在嘗試使用
var <- as.numeric(readline(prompt="Enter a number: "))
然后在計算中使用它。
在 RStudio 中運行時它作業正常,但我需要能夠從 Windows 10 的命令列傳遞此輸入我使用的是單行批處理檔案
Rscript.exe "C:\My Files\R_scripts\my_script.R"
當它到達用戶輸入部分時,它會凍結并且不提供預期的輸出。
uj5u.com熱心網友回復:
從檔案readline():
這只能在互動式會話中使用。[...] 在非互動式使用中,結果就像回應是 RETURN 并且值為“”。
對于非互動式使用 - 從命令列呼叫 R 時 - 我認為您有兩個選擇:
- 用于
readLines(con = "stdin", n = 1)從終端讀取用戶輸入。 - 用于
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")
呼叫腳本:
Rscript.exe "some-r-file.R"
它現在會詢問您的輸入。這是來自 PowerShell 的螢屏截圖,我在其中提供了“任何文本!”。

然后 output.txt 將包含:
Any text!
2. 使用commandArgs()
Rscript.exe從終端呼叫 an 時,您可以添加額外的引數。隨著commandArgs()你可以捕捉這些論點并在代碼中使用它們。
例子:
使用commandArgs()的R-腳本:
# 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!
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/399819.html
