0

我正在尝试创建一个模型,其中 R 向用户提出一些问题,而用户回答这些问题。

我已经创建了两个向量。一个是数字,另一个是用字符写的相同数字:

a <- 1:10
words <- c("one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten")
> a
 [1]  1  2  3  4  5  6  7  8  9 10
> words
 [1] "one"   "two"   "three" "four"  "five"  "six"   "seven" "eight" "nine"  "ten" 

我想创建一个脚本,对于 中的每个项目a,它会自动提出一个问题,例如:1?then2?等。用户接听,为了转到下一个号码,需要接听one,然后two以此类推。

如果用户犯了错误,程序需要能够记住错误并在 n 个问题后再次提出问题。我想我应该使用 while 命令,readline但我不确定。

4

1 回答 1

1

这应该没问题:

test <- winDialogString("Please insert a value", default="")

然后输入,说,“你好”。

> test
[1] "Hello"

您所需循环的一个简单示例是:

a <- ""
test <- 1L
while(a!=test){
  a <- winDialogString(paste0(test,"?"), default="")
}

编辑:对不起,我之前误解了这个问题

a <- 1L:10L
test <- c("one","two", "three", "four", "five", "six", "seven", "eight", "nine", "ten")
res <- ""

for(i in seq_along(a)){
  if(is.null(res)) break
  while(res!=test[i]){
    res <- winDialogString(paste0(a[i],"?"), default="")
    if(is.null(res)) break 
  }
}

上述版本在用户按下 时停止执行cancel。相反,如果您希望用户完成以下练习

a <- 1L:10L
test <- c("one","two", "three", "four", "five", "six", "seven", "eight", "nine", "ten")
res <- NULL

for(i in seq_along(a))
  while(is.null(res) || res!=test[i])
    res <- winDialogString(paste0(a[i],"?"), default="")

一直要求解决方案(对于所有数字 1 到 10),直到您正确响应,并且单击cancel不会有任何效果。

于 2013-10-07T15:12:48.930 回答