Проблема с al oop в BMI калькуляторе R языка - PullRequest
0 голосов
/ 16 января 2020

У меня проблема со школьным заданием -> Калькулятор ИМТ

Вот мой код:

 #Przedziały
niedowaga <- seq(16.00, 18.40, 0.01)
norma <- seq(18.50, 24.90, 0.01)
nadwaga <- seq(25.00, 30.00, 0.01)
print(niedowaga)
print(norma)
print(nadwaga)
 #Pytanie
waga = as.integer(readline(prompt="Podaj swoją wagę: "))
wzrost = as.integer(readline(prompt="Podaj swój wzrost w cm: "))
 #Formuła
bmi <- waga/wzrost**2 * 10000
 #Zaokrąglenie BMI do jednej liczby po przecinku
bmi_round <-round(bmi, digits = 2)
 #Wyświetlenie wartości BMI po zaokrągleniu
print(bmi_round)
 #Sprawdzenie BMI w oparciu o przedziały
for(bmi_round in niedowaga) {
  if(bmi == niedowaga) {
    print("Niedowaga")
  }
}
else {
  if (bmi == norma) {
    print("Norma")
  }
}
else if (bmi == nadwaga) {
  print("Nadwaga")
}

У меня есть три переменные последовательности: «niedowaga, norma и nadwaga» I рассчитал индекс BMI.

Теперь мне нужно сделать al oop, чтобы проверить вычисленный BMI. «bmi_round» должен проверить, к какой последовательности он подходит - «niedowaga», «norma» и «nadwaga» (первые три переменные) и дать вывод на основе вычисленного ИМТ и последовательности -

Как я могу сделать это?

Извините за язык в комментариях и имя переменной - это poli sh;)

1 Ответ

0 голосов
/ 16 января 2020

A l oop не требуется для этого:

waga = 30L #changed from readline
wzrost = 60L #changed from readline

bmi <- waga/wzrost**2 * 10000

ifelse(bmi >= 16 & bmi < 18.5, 'Niedowaga', 
       ifelse(bmi >= 18.5 & bmi < 25, 'Norma',
              ifelse(bmi >=25 & bmi <= 30, 'nadwaga', 'outside normal range')))

# or

dplyr::case_when(bmi >= 16 & bmi < 18.5 ~ 'Niedowaga',
                 bmi >= 18.5 & bmi < 25 ~ 'Norma',
                 bmi >=25 & bmi <= 30 ~ 'nadwaga',
                 TRUE ~ 'outside normal range')

Для вашего l oop имеются общие ошибки. Похоже, вы пытаетесь сравнить переменную bmi_round со всем остальным. Вместо этого ваш l oop на самом деле ничего не делает - bmi_round меняется на каждый элемент niedowaga в l oop и не используется. Вот один из способов изменить это

bmi_round <- 23

for(nied in niedowaga){
  if (bmi_round == nied) print("Niedowaga")
}

for (norm in norma){
  if (bmi_round == norm) print("Norma")
}
# [1] "Norma"

for (nad in nadwaga){
  if (bmi_round == norm) print("Nadwaga")
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...