如何使该R代码更简洁使用S4类?

问题描述

代码对我来说似乎是多余的,但是我不确定如何使其更简洁?我听说我可以使用一个似然计算器类,该类将被分配给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()