如何在 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
我正在尝试在 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