У вас есть кости того, что должно быть общей идеей здесь, но вы были сбиты в нескольких местах с помощью простых ошибок. Вот аннотированная версия, которая работает, когда вы описываете:
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, например. 'year_of_data! = (2012 | 2013)' и 'if(), print()'. Также считайте свои открытые и закрытые скобки. Не звучать неряшливо, но я бы посоветовал вам прочитать некоторые учебники R, чтобы узнать, что такое правильный синтаксис R. –
В чем этот вопрос может помочь другим? Мы не здесь, чтобы отлаживать ваш код. – agstudy
Я в порядке с помощью отладки, но этот код выглядит только как R-код, когда на самом деле это не правильный R-код. –