Использование функции переключения вместо вложенных функций if - PullRequest
2 голосов
/ 02 апреля 2020

Я новичок в R и изучаю вложенные функции if. Я выполнил следующее упражнение из Книги Р, чтобы определить точные дозы препарата. Если в doselevel был какой-либо экземпляр "High", я выполнял операции с различными дозами lowdose, meddose, highdose и возвращал вектор правильных dosage. У меня это работает с использованием вложенных функций if, но я видел, что это намекало на то, что это ситуация, которая может лучше подходить для switch функции.

Как бы выглядела функция переключения в этой ситуации?

lowdose <- 12.5
meddose <- 25.3
highdose <- 58.1
doselevel <- factor(c("Low","High","High","High","Low","Med","Med"),levels=c("Low","Med","High"))

if(any(doselevel=="High")){
  if(lowdose>=10){
    lowdose <- 10
  } else {
    lowdose <- lowdose / 2
  }
  if(meddose>=26){
    meddose <- 26
  }
  if(highdose>=60){
    highdose <- highdose * 1.5
  } else {
    highdose <- 60
  }
  doseage <- rep(lowdose,times=length(doselevel))
  doseage[which(doselevel=="Med")] <- meddose
  doseage[which(doselevel=="High")] <- highdose
} else {
  doselevel <- factor(doselevel,c("Low","Med"),labels=c("Small","Large"))
  if((lowdose<15)&&(meddose<35)){
      lowdose <- lowdose * 1.5
      meddose <- meddose + highdose
  }
}

...