Создание вопросов функции R - PullRequest
0 голосов
/ 26 мая 2020

У нас возникают трудности с написанием функции в программе R. Наш вопрос: «Если полученное нами число нечетное, давайте умножим его на 3 и увеличим на 1. Если наше число четное, давайте разделим на два.

ПРИМЕР

если наш номер 7,

7 * 3 + 1 = 22 * ​​1007 *

22/2 = 11

11 * 3 + 1 = 34

34/2 = 17

....

Чтобы серия продолжалась «Не могли бы вы нам помочь?

f=function(x) { 
  if(which(x%%2==0)) { 
    x=x/2 
    print(x) 
  } else { 
    if(which(x%%2==1)) { 
      x=3*x+1  
      print(x) 
    } 
  } 
} 

> f(2) 
[1] 1 

> f(4) 
[1] 2 

> f(3) 

Ошибка в if (which (x %% 2 == 0)) {: аргумент имеет нулевую длину

1 Ответ

0 голосов
/ 26 мая 2020

Вы можете значительно упростить этот код. Я думаю, что другие уже упоминали то «что» здесь неверно. Но также обратите внимание на тот факт, что если что-то не является четным (делится на два), то оно должно быть нечетным. Это означает, что решение является дихотомическим (т.е. 0 или 1). Таким образом, вы можете упростить код до следующего. Обратите внимание, что мы также переместили печать после оператора if, поскольку мы всегда должны печатать результат. Дублировать код не нужно. Что касается серии, вам нужно будет использовать al oop. Вы можете посмотреть на выполнение рекурсивного l oop, но имейте в виду, что это бесконечная функция, и вам следует остановить ее, если вы не хотите попытаться увидеть бесконечность.

f=function(x) { 
  if(x%%2==0) { 
    x=x/2 
  } else { 
      x=3*x+1  
  } 
  return (x) # Ben Bolker made a good point that you will need to return X

} 

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