Если вы просто выполните код, numterms
определен неправильно. Обычно он определяется пользовательским вводом: функция readline считывает числа, которые пользователь вводит в командной строке. Если вы просто выполните эту строку, вы можете правильно определить numterms
.
Если вы выполняете весь код одновременно, numterms
устанавливается на NA
, что нельзя сравнить с 0
в предложении numterms <= 0
. В этом случае numterms <= 0
также является NA
, что не является логическим значением и поэтому не может быть оценено с помощью if
. В конечном итоге это приводит к вашей ошибке.
Решение состоит в том, чтобы просто запустить первую строку вашего кода и ввести номер, и только после того, как вы ввели номер, выполнить остальную часть кода.
В качестве альтернативы вы можете определить свой код как функцию:
printFibonacci <- function(){
numterms = as.integer(readline(prompt="What is your max number? "))
if(is.na(numterms)){
numterms <- 4
}
# first two items
num1 = 0
num2 = 1
counter = 2
# check if the number of terms is valid
if(numterms <= 0) {
print("Please enter an integer above zero")
} else {
if(numterms == 1) {
print("The Fibonacci sequence:")
print(num1)
} else {
print("The Fibonacci sequence:")
print(num1)
print(num2)
while(counter < numterms) {
numth = num1 + num2
print(numth)
# update values
num1 = num2
num2 = numth
counter = counter + 1
}
}
}
}
А затем просто вызовите свою функцию с помощью printFibonacci()
. В этом случае запрос и ответ функции readline
выполняются первыми, и пользователь может определить numterms
до выполнения остальной части кода.