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

Jon*_*ton 4 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 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")
}
Run Code Online (Sandbox Code Playgroud)

生成错误读取:

Error: unexpected '{' in "While((year_of_data != 2012) | (year_of_data != 2013)){"
Run Code Online (Sandbox Code Playgroud)

任何帮助将非常感激.

jor*_*ran 14

你有这个一般想法的骨头,但你已经在几个地方被简单的错误绊倒了.这是一个带注释的版本,可以按照您的描述运行:

yr_function <-function(){
   res <- as.numeric(readline("Is the year of concern 2012 or 2013? >>> "))
   if (is.na(res)){
    res <- -1
   }
   res
}
Run Code Online (Sandbox Code Playgroud)

您的第一个问题之一就是范围.您year_of_data在此函数内部和while循环之前定义了两者.但是在函数内部创建的变量不会引用while循环之前的变量.它们存在于不同的环境中.所以我修改了这个函数来代替返回用户输入的值.

你没有多讨论验证,这是一个很大的话题.我在这里添加了一小部分验证.基本上,如果用户输入的内容无法合理地强制为数字,那么您将获得NA值,这将是一个令人头疼的问题.所以我只是检查一下并在这种情况下返回-1.这不是验证问题的完整解决方案.

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
    }
}
Run Code Online (Sandbox Code Playgroud)

这是固定while循环.首先,我修复了一些简单的语法错误(它while不是While等等).然后我将结果分配yr_function()给year_of_data,以便我们可以检查结果值并相应地采取行动.

你对ifcondition(year_of_data != (2012 | 2013))的尝试在语法上是不正确的,所以我切换到检查值是否包含在向量中c(2012,2013).

最后,您if使用了逗号,然后是打印语句.逗号是另一个语法错误.所以我在print声明中添加了大括号,并添加了一个如果用户输入正确的内容则会else突破while循环的子句.

更一般地说,您可能想要调查menu此类任务的功能.它可能会使验证问题更容易处理.