gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 22:05:49 25 4
gpt4 key购买 nike

我编写了代码,要求用户输入“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")
}

有错误生成读取:
Error: unexpected '{' in "While((year_of_data != 2012) | (year_of_data != 2013)){"

任何帮助将非常感激。

最佳答案

您已经了解了这里的总体思路,但是您在几个地方被简单的错误绊倒了。这是一个按您描述的方式工作的带注释的版本:

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 循环之前都定义了 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
}
}

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

您对 if 条件 ( year_of_data != (2012 | 2013) ) 的尝试在语法上不正确,因此我转而检查该值是否包含在向量 c(2012,2013) 中。

最后,您在 if 后面跟着一个逗号,然后是一个打印语句。逗号是另一个语法错误。因此,我在 print 语句周围添加了大括号,并添加了一个 else 子句,如果用户输入正确,则该子句会跳出 while 循环。

更一般地说,您可能想要研究此类任务的 menu 函数。它可能会使验证问题更容易处理。

关于r - 如何修复具有多个返回错误的条件的 while 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15957949/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com