11 define function
函数功能使我们尽可能避免复制粘贴代码,而且需要更改的时候不需要大面积修改代码仅需要调整函数参数,使代码整体更加模块化.
假设有工作任务需要给商品SKU排名,在代码中需要重复以下代码5次,当区间需要修改的时候就是灾难.
原始代码示例如下:
library(tidyverse)
num <- sample(1:1000,1000)
res1 <- if_else(num <= 50,"1-50",
if_else(num <= 100,"51-100",
if_else(num <= 150,"101-150",
if_else(num <= 200 ,"151-200",
if_else(num >200,"200以上",'其他')))))
# same above
# case_when(num <= 50 ~ '1-50',
# num <= 100 ~ '51-100',
# num <= 150 ~ '101-150',
# num <= 200 ~ '151-200',
# num > 100 ~ '200以上'
# )
# 个人倾向data.table
# data.table::fifelse()
# data.table::fcase() 是sql中case when的实现函数化后代码示例如下:
当需要修改区间时候仅仅只需要调整参数,而不必大量修改代码,当在脚本中需要调用多次时,能简洁代码.
# 排名区间函数
#library(tidyverse)
cut_function <- function(vecto,x,n){
vec <- c(0)
for(i in 1:n){
kong <- i*x
vec <- c(vec,kong)
}
vec <- c(vec,Inf)
labels <- c()
j <- 1
while (j<=n) {
labels[j] <- str_c(vec[j]+1,"-",vec[j+1])
j <- j+1
}
labels <- c(labels,paste0(vec[j],'以上'))
res <- cut(x = vecto,breaks = vec,labels = labels) %>% as.character()
}
res2 <- cut_function(num,50,4)
# identical(res1,res2)
# > TRUE