问题描述
此代码对我来说似乎是多余的,但是我不确定如何使其更简洁?我听说我可以使用一个似然计算器类,该类将被分配给SpecificLikelihoodFactorXXXX对象,但是我不确定该怎么做。
likelihood <- (density*count)/100000000
if (factorA=="Yes") {
likelihood<- likelihood*.35
}
if (factorB<30){
likelihood <- likelihood*1.31
}
if (factorC>50){
likelihood <- likelihood*1.9
} else if (factorC>25){
likelihood <- likelihood*1.6
} else if (factorC>10){
likelihood <- likelihood*1.3
} else if (factorC==0){
likelihood<- likelihood
}
if (factorD=="Yes"){
likelihood <- likelihood*1.66
}
解决方法
这是一个使用case_when()
软件包中的dplyr
函数的选项。
library(dplyr)
likelihood <- (density*count)/100000000
likelihood <- if_else(factorA == "Yes",likelihood * 0.35,likelihood)
likelihood <- if_else(factorB < 30,likelihood * 1.31,likelihood)
likelihood <- case_when(
factorC > 50 ~ likelihood * 1.9,factorC > 25 ~ likelihood * 1.6,factorC > 10 ~ likelihood * 1.3,factorC == 0 ~ likelihoodOfHarm
)
likelihood <- if_else(factorD == "Yes",likelihood * 1.66,likelihood)
注意:我解释了这一行
} else if (factorC==0){
likelihoodOfHarm <- likelihoodOfHarm
}
是一个错字,并用likelihood <- likelihoodOfHarm
代替了。如果不正确,请在case_when()
函数中将其删除。
只是提醒一下,在使事情简明扼要和使事情难以修改和更改之间保持平衡。
修改。利用dplyr
的{{3}}函数代替基数R的ifelse()