我编写了一个代码,该代码可以吸引用户一些答案并执行一个功能,但是我的条件太差了。
如果答案为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这是一个外部参数。
输出为“精细”。它的功能符合我的期望,但是如果答案是yes
或no
,则代码将执行相同的功能。
答案 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