2

以下の関数では、最初の 3 つの選択肢 (1 ~ 3 に等しくない値) 以外の値が入力された場合、関数が元の質問にループバックするように入力を制御したいと思います。

T<-function(){
Load<-readline("
Choose Task 
1 Task 1
2 Task 2
3 Task 3 ")
for(i in 1:10){
    if(Load=="")
    {print.noquote("No Value Entered"); Load<-readline("
Choose Task 
1 Task 1
2 Task 2
3 Task 3 ")
    }else
    if(Load==1)
    {source("/Users/JD/Desktop/R1.R")}
    else
    if(Load==2)
    {source("/Users/JD/Desktop/R2.R",print.eval=TRUE)}
    else
    if(Load==3)
    {source("/Users/JD/Desktop/R3.R",print.eval=TRUE)}
    else
    {print.noquote("Must enter 1-3"); ** loop back to "Choose Task"**}



}}

したがって、** がある場所は、コードの 2 行目にループバックする行になります。私はすでに「空白」の応答を制御しましたが、1〜3に等しくないものについても同様のことをしたいと思います. ループバックが許可されていない場合は、同じ効果を得る別の方法がある可能性があります。

4

3 に答える 3

3

I would actually advise against the answers provided so far and suggest you use the handy menu function which basically does what you want for you.

> menu(c("Task1", "Task2", "Task3"), title = "Choose Task")
Choose Task 

1: Task1
2: Task2
3: Task3

Selection: 4
Enter an item from the menu, or 0 to exit
Selection: 1
[1] 1

The result of menu will either be 0, 1, 2, or 3.

Edit: To please GSee ... this is how you could refine it to actually do what the user wants

T <- function(){
    choice <- menu(c("Task1", "Task2", "Task3"), title = "Choose Task, or 0 to exit")

    switch(choice,
           source("/Users/JD/Desktop/R1.R"),                    # 1
           source("/Users/JD/Dekstop/R2.R, print.eval = TRUE"), # 2
           source("/Users/JD/Desktop/R3.R, print.eval = TRUE")) # 3
}

If the user chooses 0 then the switch statement won't execute any of the inputs.

于 2012-07-18T17:28:58.100 に答える
3

switchと再帰を組み合わせて使用​​できます

ChooseTask <- function() {
    Load <- readline("Choose Task. 1, 2, or 3: ")
    switch(Load, 
           "1"={cat("1", "\n")},
           "2"={cat("2", "\n")},
           "3"={cat("3", "\n")},
            {
                print.noquote("Must enter 1-3") 
                ChooseTask()
            })
}
> ChooseTask()
Choose Task. 1, 2, or 3: 2
2 
> ChooseTask()
Choose Task. 1, 2, or 3: 5
[1] Must enter 1-3
Choose Task. 1, 2, or 3: 1
1 
于 2012-07-18T00:20:03.383 に答える
2

これは、単純なループで実行できます。

choice <- 0
while( !( choice %in% 1:3 ) ) {
   choice <- readline('Choose 1, 2, or 3:')
}
于 2012-07-18T17:05:28.020 に答える