执行要求的R脚本并合并用户提示

时间:2016-04-12 15:01:13

标签: r prompt raw-input

我在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等待用户输入的值?

3 个答案:

答案 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)