[英]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.