0

R がユーザーにいくつかの質問をし、ユーザーがそれらに答えるモデルを作成しようとしています。

私はすでに2つのベクトルを作成しています。一方には数字があり、もう一方には同じ数字が文字で書かれています。

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 に答える