我在RStudio中开发一个R脚本,要求用户输入两个值(名字和姓氏)。这些输入稍后将用于文本文档的模式匹配。
在Python中,raw_input将用于收集这些值,我理解readline(prompt =)是R中的关联函数,但我似乎无法让我的脚本停止请求值。相反,它会附加下一行代码。
我提示用户输入姓名的功能是:
askForName <- function(firstOrLast){
if(firstOrLast == "first"){
x <- readline(prompt = "Enter first name: ")
}
else if(firstOrLast == "last"){
x <- readline(prompt = "Enter last name: ")
}
return(x)
}
当我跑步时:
firstName <- askForName("first")
lastName <- askForName("last")
控制台返回:
> firstName <- askForName("first")
Enter first name: lastName <- askForName("last")
如何在继续编写脚本之前让R等待用户输入的值?
答案 0 :(得分:1)
如果您运行包含这些函数调用的脚本,它将正常工作。在这种情况下的问题是你在“readline”调用后粘贴一行。我刚刚对此进行了测试,它的工作正常,就像我工作的公司使用的生产代码一样。
test.R:
askForName <- function(firstOrLast){
if(firstOrLast == "first"){
x <- readline(prompt = "Enter first name: ")
}
else if(firstOrLast == "last"){
x <- readline(prompt = "Enter last name: ")
}
return(x)
}
firstName <- askForName("first")
lastName <- askForName("last")
然后:
source("test.R")
Enter first name: Alan
Enter last name: O'Callaghan
答案 1 :(得分:0)
尝试使用此代替readline
:
cat("a string please: ")
a <- readLines("stdin",n=1);
cat(a, "\n")
答案 2 :(得分:0)
您可以创建函数类型行()来读取输入行,然后将结果用于下一个命令。它将等待您在Rstudio或终端中运行代码的输入文本:
typeline <- function(msg="Enter text: ") {
if (interactive() ) {
txt <- readline(msg)
} else {
cat(msg);
txt <- readLines("stdin",n=1);
}
return(txt)
}
firstname=typeline("firstName: ")
secondname=typeline("secondName: ")
print(firstname)
print(secondname)