R 如何修复多个条件返回错误的while循环

R 如何修复多个条件返回错误的while循环,r,while-loop,multiple-conditions,R,While Loop,Multiple Conditions,我已经编写了代码,要求用户键入“2012”或“2013”。然后我进行while循环检查,查看用户是否键入2012或2013 输入有效年份的请求应一直持续到用户输入有效数字为止。然而,我不断地得到一个错误,一个意外的“{”发生了。我不知道为什么这会在我的代码中产生这样一个错误 代码如下: yr_function <-function(){ year_of_data <- as.numeric(readline("Is the year of concern 2012 or 201

我已经编写了代码,要求用户键入“2012”或“2013”。然后我进行
while
循环检查,查看用户是否键入2012或2013

输入有效年份的请求应一直持续到用户输入有效数字为止。然而,我不断地得到一个错误,一个意外的“{”发生了。我不知道为什么这会在我的代码中产生这样一个错误

代码如下:

yr_function <-function(){
   year_of_data <- as.numeric(readline("Is the year of concern 2012 or 2013? >>> "))
}

year_of_data = 0
While((year_of_data != 2012) | (year_of_data != 2013)){
    yr_function
if(year_of_data != (2012 | 2013),print("You must type either 2012 or 2013")
}

任何帮助都将不胜感激。

您已经掌握了这里的基本概念,但是您在几个地方被简单的错误绊倒了。下面是一个注释版本,可以按照您的描述工作:

yr_function <-function(){
   res <- as.numeric(readline("Is the year of concern 2012 or 2013? >>> "))
   if (is.na(res)){
    res <- -1
   }
   res
}
这里是固定的
while
循环。首先我修复了一些简单的语法错误(它是
while
而不是
while
,等等)。然后我将
yr\u函数()的结果指定给
年的
,这样我们就可以检查结果值并采取相应的行动

您尝试的
if
条件(
year\u of_data!=(2012 | 2013)
)语法不正确,因此我切换到检查向量
c(20122013)
中是否包含该值

最后,您在
if
后面加了一个逗号,然后是一个print语句。逗号是另一个语法错误。因此,我在
print
语句周围添加了大括号,并添加了一个
else
子句,如果用户输入了正确的内容,该子句将中断
while
循环


更一般地说,您可能需要研究这类任务的功能
菜单
。这可能会使验证问题更容易处理。

您的代码中填充了不正确的R代码,例如
年份数据!=(2012 | 2013)
if(),print()
。也算上你的左括号和右括号。听起来不那么刺耳,但我建议你阅读一些R教程,了解正确的R语法是什么。我很乐意帮助调试,但这段代码只看起来像R代码,而实际上它不是正确的R代码。我知道你们两个都是相当敏感的人,所以我希望我没有伤害他们你对一个问题的感受。特别是,我觉得代码是正确的,特别是基于我在R中读过的书。显然不是,所以我对while结构的误解——正如问题中提出的那样。为什么会在这里出错?因为就我的if而言,我可以得到条件的结果在if(condition,resultant)中,或者我可以写if(condition){resultant}。我确实理解,也许条件在if条件中写得不好。我知道这个问题得到的回答与它的质量不太相称,在游说将其删除后,我刚刚在第五次接近投票时写了一个相当长的答案。我希望能再进行一些公开投票。谢谢!+1ed回答,然后花点时间帮助别人。谢谢你Joran。我真的很感谢你这么做。这非常有帮助,也让我看了看路。
yr_function <-function(){
   res <- as.numeric(readline("Is the year of concern 2012 or 2013? >>> "))
   if (is.na(res)){
    res <- -1
   }
   res
}
year_of_data <- 0
while((year_of_data != 2012) & (year_of_data != 2013)){
    year_of_data <- yr_function()
    if (!year_of_data %in% c(2012,2013)){
        print("You must type either 2012 or 2013")
    }else{
        break
    }
}