使用切换函数代替嵌套的if函数。

问题描述 投票:2回答:1

我是R的新手,我一直在研究嵌套的if函数。我做了《R书》中的以下练习来确定一种药物的精确剂量。如果有任何 "High "的实例,在 doselevel 我对各种剂量进行了手术 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
  }
}

r if-statement switch-statement
1个回答
1
投票

kit 在CRAN上有一个嵌套的if函数,叫做 nif它还具有一个矢量化的开关功能。vswitch 这是更快的。供您参考,它也有一个快速的 ifelse 函数称为 iif. 这些函数都是用C语言编写的,以提高速度。请看这些函数的文档。

© www.soinside.com 2019 - 2024. All rights reserved.