1 Star 7 Fork 1

zhongyf / Rbook

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
10-function.Rmd 8.11 KB
一键复制 编辑 原始数据 按行查看 历史
zhongyf 提交于 2021-05-26 18:47 . commit
# 自定义函数{#self:define-function} 函数功能使我们尽可能避免复制粘贴代码,而且需要更改的时候不需要大面积修改代码仅需要调整函数参数,使代码整体更加模块化. 假设有工作任务需要给商品SKU排名,在代码中需要重复以下代码5次,当区间需要修改的时候就是灾难. 原始代码示例如下: ```{r message=FALSE,warning=FALSE} library(tidyverse) 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的实现 ``` 函数化后代码示例如下: 当需要修改区间时候仅仅只需要调整参数,而不必大量修改代码,当在脚本中需要调用多次时,能简洁代码. ```{r } cut_function % as.character() } res2 [1] "a, b, c, d, e, f, g, h, i, j" rule % show_missings() %>% mutate(mpg = ifelse(mpg < 20, NA, mpg)) %>% show_missings() ``` ## 环境 {#function:environment} 环境是复杂的,建议阅读原文. The last component of a function is its environment. This is not something you need to understand deeply when you first start writing functions. However, it’s important to know a little bit about environments because they are crucial to how functions work. The environment of a function controls how R finds the value associated with a name. For example, take this function: ```{r} f ## 拓展部分{#function:expand} 在我之前工作中遇到需要分组计算时,我想要编写一个函数实现某些功能,但是分组的group_by()字段不一样时,导致代码没办法复用。 参考资料: ```{r eval=FALSE} #library(tidyverse) mean_mpg = function(data, group_col) { data %>% group_by(group_col) %>% summarize(mean_mpg = mean(mpg)) } mtcars %>% mean_mpg(cyl) mtcars %>% mean_mpg(gear) ``` 当编写如下函数时,代码将成功运行 ```{r} #自定义函数 my_summarise3 % group_by({{ group_var }}) %>% summarise(mean = mean({{ mean_var }}), sd = mean({{ sd_var }})) } res1 % group_by(cyl) %>% summarise(mean=mean(carb),sd=mean(gear)) identical(res1,res2) #res1 和res2 结果完全一致 ``` 以上my_summarise3()函数可以按照需求任意指定聚合汇总字段。
R
1
https://gitee.com/zhongyufei/Rbook.git
git@gitee.com:zhongyufei/Rbook.git
zhongyufei
Rbook
Rbook
master

搜索帮助