【发布时间】:2019-05-12 18:35:24
【问题描述】:
我正在尝试掌握 tidyverse 和 dplyr 方法,并希望将以下函数应用于数据框/数据表的每一列:
library(multimode)
funx <- function(x) {multimode::modetest(x, method = 'SI') }
然后尝试使用summary_all之类的东西开始,但我立即得到一个错误:
错误:列
mpg的长度必须为 1(汇总值),而不是 8
library(dplyr)
mtcars %>%
summarise_all(funx)
我希望最终得到一个新的数据框,它显示第 1 列中测试的 colnames,以及第 2 列中 modetest 的 p 值
从昨天(2019 年 5 月 23 日)更新软件包后,我的解决方案无法正常工作,以下代码现在打印 '.'点而不是列名 向github页面提交了一个帖子询问这个变化的原因:github
library(multimode)
funx <- function(x) {
print(substitute(x))
multires <- multimode::modetest(x, method = 'SI')
p <- multires$p.value}
mtcars %>%
select(1:2) %>%
summarise_all(list(~ funx(.)))
更新具有讽刺意味的是,在得到关于 github 帖子的反馈后,使用新版本我们现在可以这样做:
mtcars %>%
select(1:2) %>%
summarise_all(funx)
正如您所看到的,这与我在发布此问题时开始我的问题时使用的语法完全相同。所以,dplyr 团队做得很好,我会说语法更“自然”。
【问题讨论】: