При запуске кода в R было выдано сообщение об ошибке, что отсутствовало значение, в котором необходимо значение true / false, и я не могу это исправить - PullRequest
0 голосов
/ 04 ноября 2018

Я новичок в использовании R и имею минимальный опыт работы с Python. Я уверен, что это легко исправить, но я просто не вижу этого. Мне дали код для запуска последовательности Фибоначчи до 100, и я скопировал и вставил ее, но я получаю следующий код ошибки: Ошибка в if (numterms <= 0) {: пропущено значение, где требуется TRUE / FALSE. Я знаю, что это связано с предложением if / else, но я не вижу проблемы. Я пробежал код несколькими способами, но это не помогло. И человек, чтобы помочь, не доступен в выходные дни. Любая помощь будет оценена. </p>

# take the max number input from the user
numterms = as.integer(readline(prompt="What is your max number?  "))

# 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
        }
    }
}

1 Ответ

0 голосов
/ 04 ноября 2018

Если вы просто выполните код, 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 до выполнения остальной части кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...