我正在尝试弄清楚,如何在Windows命令提示符下使用Rscript
运行r脚本并要求用户输入。
到目前为止,我已经找到了如何在 R 的交互式 shell 中请求用户输入的答案。任何对readline()
或scan()
做同样事情的努力都失败了。
例:
我有一个多项式y=cX
,其中X
可以取多个值X1
、X2
、X3
等。 C
变量是已知的,所以为了计算y
的值,我需要的是向用户询问Xi
值并将它们存储在脚本中的某个位置。
Uinput <- function() {
message(prompt"Enter X1 value here: ")
x <- readLines()
}
这是要走的路吗?还有其他论点吗?as.numeric
会有帮助吗?如何退货X1
?实现会因操作系统而异吗?
谢谢。
这是一般的方法,但实现需要一些工作:你不想要readLines,你想要readline(是的,名称相似。是的,这很愚蠢。R充满了;)愚蠢的东西。
你想要的是这样的:
UIinput <- function(){
#Ask for user input
x <- readline(prompt = "Enter X1 value: ")
#Return
return(x)
}
不过,您可能希望在那里进行一些错误处理(我可以提供 FALSE 或"萝卜"的 X1 值)和一些类型转换,因为 readline 返回一个单条目字符向量:提供的任何数字输入都可能应该转换为数字输入。因此,一种不错的、用户证明的方法可能是......
UIinput <- function(){
#Ask for user input
x <- readline(prompt = "Enter X1 value: ")
#Can it be converted?
x <- as.numeric(x)
#If it can't, be have a problem
if(is.na(x)){
stop("The X1 value provided is not valid. Please provide a number.")
}
#If it can be, return - you could turn the if into an if/else to make it more
#readable, but it wouldn't make a difference in functionality since stop()
#means that if the if-condition is met, return(x) will never actually be
#evaluated.
return(x)
}
我通过 Rscript 运行 Rscript 不起作用.exe在批处理文件 (.bat) 中。正如有人写的那样,这也对我有用:
cat("blablabla: ")
x <- readLines(con="stdin", 1)
x <- as.numeric(x)