UserInput功能

时间:2019-06-28 08:07:02

标签: r

我编写了一个代码,该代码可以吸引用户一些答案并执行一个功能,但是我的条件太差了。 如果答案为yes,则执行功能x;如果答案为no,则跳转功能x。 问题是除yes之外的所有答案都跳了功能x

原始代码

userInput <- function(question) {
  cat(question)
  con <- file("stdin")
  on.exit(close(con))
  n <- readLines(con, n = 1)
  return(n)
}

if (opt$indexBuild) {
  if (!file.exists(file.path(paste(index_Folder, '/', 'Genome', sep = '')))) {
    index_genom <- star.index.function()
  }else{
    write(paste("Index genome files already exists."), stderr())
    if (casefold(userInput("Would you like to delete and re-run index generation? (yes or no) "), upper = FALSE) == 'yes') {
      index_genom <- star.index.function()
    }
  }
}

我尝试使用while循环,但没有成功。

userInput <- function(question) {
  cat(question)
  con <- file("stdin")
  on.exit(close(con))
  n <- readLines(con, n = 1)
  return(n)
}

    if (opt$indexBuild) {
      if (!file.exists(file.path(paste(index_Folder, '/', 'Genome', sep = '')))) {
        index_genom <- star.index.function()
      }else{
        write(paste("Index genome files already exists."), stderr())
        while (casefold((!(userInput("Would you like to delete and re-run index generation? (yes or no) ") %in% c('yes', 'no'))))) {
          write(paste("You should specify 'yes' or 'no' "), stderr())

        }

        index_genom <- star.index.function()
      }

    }

opt $ indexBuild这是一个外部参数。

输出为“精细”。它的功能符合我的期望,但是如果答案是yesno,则代码将执行相同的功能。

(Fig.1) If the answer it is not yes or no, keeping ask, if yes execute index_genom <- star.index.function(). this it is correct.

(Fig.2) If the answer it is not yes or no, keeping ask, if no execute index_genom <- star.index.function(). this it is not correct.

2 个答案:

答案 0 :(得分:0)

您需要一个循环,在该循环中捕获用户输入,然后根据输入内容执行不同的操作。例如,您可以重写while循环以执行类似的操作(请注意,我已将userInput替换为readline,因为前者对我不起作用)

repeat {
    inp <- casefold(readline("Delete and generate new index? (yes/no) -> "))

    if (inp %in% c("yes", "no")) break
    else write("Specify 'yes' or 'no'", stderr())
}

if (inp == "yes") index_genom <- star.index.function()

如您所见,我已经将用户输入保存到inp,仅当inp yes no ,然后如果有index_genom <- star.index.function(),我就叫inp == "yes"

答案 1 :(得分:0)

非常感谢您,盖瑟特。 您的代码可以在R终端上使用,但不能在linux终端上使用。我认为是因为 public function images() { return $this->hasMany(Product::class, 'image'); } 函数,所以我已经使用readline()函数对其进行了编辑。我没有考虑过userImput()循环。

再次感谢您

repeat