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