簡體   English   中英

如何矢量化 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM