如何设计默认参数为"."的dplyr辅助函数?实现tibble按行求和
给Tibble按行求和并优化管道内的辅助函数调用
首先,针对你想要在dplyr管道里不用显式传递.的需求,只需要把辅助函数的参数默认值设为.就行啦,这样在管道中调用时就能自动识别当前数据框:
library(tibble) library(dplyr) set.seed(42) N <- 10 Df <- tibble(p_1 = rnorm(N), p_2 = rnorm(N), q_1 = rnorm(N), q_2 = rnorm(N)) # 修改后的辅助函数,参数默认值设为 . myfun <- function(Df = .){ apply(Df, 1, sum) } # 现在直接调用即可,无需传参 Df %>% mutate(total = myfun())
这样修改后,在管道链里调用myfun()时,dplyr会自动把当前的数据流(也就是.)传递给函数的默认参数,完美符合你的需求~
补充:更高效的dplyr风格写法
其实在dplyr生态里,还有更简洁高效的方式实现按行求和,不需要用apply,可以用rowSums()函数,代码更简洁也更适配tibble:
Df %>% mutate(total = rowSums(across(everything())))
这里across(everything())指定对所有列进行操作,rowSums直接计算每行的和,比apply的性能更好,尤其是数据量较大的时候。
内容的提问来源于stack exchange,提问作者mjandrews
相关产品推荐
相关产品推荐

