我已经写了代码,要求用户输入"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)){"任何帮助都将不胜感激。
发布于 2013-04-12 11:13:00
您已经掌握了本应是一般概念的框架,但是在一些地方,您已经被一些简单的错误所绊倒。下面是一个带注释的版本,它按照您的描述工作:
yr_function <-function(){
res <- as.numeric(readline("Is the year of concern 2012 or 2013? >>> "))
if (is.na(res)){
res <- -1
}
res
}你首先遇到的问题之一就是作用域。您在此函数内部和while循环之前都定义了year_of_data。但是在函数内部创建的变量不会引用while循环之前的变量。它们存在于不同的环境中。所以我修改了这个函数,改为返回用户输入的值。
您没有过多地讨论验证,这是一个重要的话题。我在这里添加了一些非常小的验证。基本上,如果用户输入一些不能合理地强制转换为数字的内容,那么您将获得安娜的值,这将是一个令人头疼的问题。所以我只是简单地检查一下,在这种情况下返回-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语句。逗号是另一个语法错误。因此,我在print语句两边添加了大括号,并添加了一个else子句,如果用户输入了正确的内容,该子句就会中断while循环。
更一般的情况下,您可能希望研究这类任务的函数menu。这可能会使验证问题变得更容易处理。
https://stackoverflow.com/questions/15957949
复制相似问题