如何在 R 中向量化 ifelse 函数?

How to vectorise ifelse function in R?

我正在尝试在 R 中使用 ifelse 创建一个向量化函数,但我的代码只获取向量的第一个元素。例如,如下面的代码所示,当我将“y”分配给 Years 参数时,代码没有给出向量输出,而是只给出了第一个元素的结果。

有人能告诉我如何向量化输出吗?


salaryCAl2 <- function(Years=1, Department){

  ifelse(Department=="Sales",Years * 10000 * 1.2,
 
         ifelse(Department == "Data", Years*12000*1.3, Years*13000*1.15))
}

y <- c(2,3)

salaryCAl2(y, "HR")

您的函数可以通过多种方式向量化。一种方法是创建一个函数来计算一年的工资,然后 salaryCal2 将此函数应用于 Years 数据的每一年。

salaryCAl2a<- function(Years=1, Department){
    single_year_cal <- function(ayear){
          
     ifelse(Department=="Sales",ayear * 10000 * 1.2,
     ifelse(Department == "Data", ayear*12000*1.3, ayear*13000*1.15))
     }
     
     unlist(lapply(Years, single_year_cal))
 }

salaryCAl2a(y, "HR")
#[1] 29900 44850

您可以使用 switch,它是矢量化的,通常是嵌套 ifelse 语句处理不同情况的更好选择。

salaryCAl2 <- function(Years = 1, Department) {
  
  switch(
    Department,
    "Sales" = Years * 10000 * 1.2,
    "Data" = Years * 12000 * 1.3,
    Years * 13000 * 1.15
  )

}

y <- c(2,3)

salaryCAl2(y, "HR")

# [1] 29900 44850