r语言 - 如何在运行时向用户询问一个整数,如果您没有得到整数,则再次递归询问?



我正在尝试编写一些执行以下所有操作的代码:

  1. 在运行时,询问用户输入一个整数的实际问题(例如,"您有多少台 PC?"(。
  2. 检查用户是否提供了整数类型的对象,或者可以强制输入该对象而不会出错。此步骤不得要求任何类型的grep(例如,使此解决方案无效(。
  3. 如果输入不是整数,不要给出任何警告或错误,而是提出一个重复的新问题,直到他们给出一个整数(例如,问"再试一次?",直到给出一个整数(。
  4. 输出此整数。

类似问题的解决方案似乎是使用scanreadlines。我已经排除了scan,因为它喜欢抛出自己的错误消息,需要print的帮助来提问,并且如果您告诉它只尝试一个无效输入,也会要求另一个输入(例如 如果你给它一堆字母,scan(n = 1,quiet = TRUE)会要求另一个输入(。我发现readlines几乎令人满意,但由于readlines将其输入视为字符串,因此我无法编写满足要求 #3 的trycatch块。

我有哪些选择?看起来我错过了一个简单的解决方案。

我们可以使用递归函数或whilerepeat循环来检查答案是否为数字

f1 <- function(question){

flag <- TRUE
while(flag) {
out <- readline(paste0(question, "n"))
out1 <- type.convert(out, as.is = TRUE)
if(is.numeric(out1)) flag <- FALSE
}

out1
}

v1 <- f1('how many PCs')
how many PCs
not sure
how many PCs
you asked the wrong person
how many PCs
#2432
how many PCs
20

v1
#[1] 20

或者另一种选择是转换为带有as.integer的整数。 如果有任何值不是整数/数字,它将返回 NA。 使用is.na作为逻辑条件,我们可以更改上面代码中的if

相关内容

最新更新