我发现ctable()
R summarytools 包中的函数存在一个怪癖,并试图看看这里是否遗漏了什么。
ctable 介绍小插图指出“完全支持来自 magrittr (%>%, %$%) 和 pipeR (%>>%) 的管道运算符;也支持 R 4.0 中引入的本机 |>。”
freq()
对于和功能来说,使用本机管道可以按预期工作descr()
。
但是,我在使用本机管道时遇到了麻烦ctable()
。如果我使用本机管道,我会收到Error: object 'ObjectName' not found
ObjectName 是函数中的变量之一的消息ctable()
。它不适用于常规 magrittr 管道。但是,ctable()
如果我切换到 magrittr 扩展管道,它确实有效%$%
。如果我添加 x= 和 y= 参数规范,我没有发现任何区别。
这种混乱中的另一个怪癖是,ctable()
如果我通过仅选择我想要的两列来减少数据框,那么它可以与本机管道一起使用ctable()
。但是,在这种情况下,我必须从中删除列名ctable()
,否则我会收到错误;此外,结果中打印的列名看起来很糟糕并且没有用。
我是不是漏掉了什么?使用本机管道或常规 magrittr 管道时,其工作方式是否ctable()
相同?freq()
descr()
对于那些好奇为什么我的例子有as.factor()
,据我所知,ctable()
在使用数值时仍然存在 PrettyNum 问题 - 请参阅Dominic Comtois 的 Github和这个SO 帖子。
可重复的示例
# setup
library(summarytools)
library(magrittr)
library(dplyr)
data("mtcars")
# these work just fine as expected
freq(mtcars$cyl)
mtcars |> freq(cyl)
mtcars |> descr(qsec)
mtcars |> subset(select=c(qsec, hp)) |> descr()
# ctable not working with the native pipe or regular magrittr pipe
mtcars |>
mutate(cyl = as.factor(cyl), gear = as.factor(gear)) |>
# mutate(cyl = as.factor(cyl), gear = as.factor(gear)) %>%
ctable(cyl, gear)
# ctable works with the exposion pipe
mtcars |>
mutate(cyl = as.factor(cyl), gear = as.factor(gear)) %$%
ctable(cyl, gear)
# ctable works with native pipe if also selecting to only the columns for ctable, but output looks off
mtcars |>
mutate(cyl = as.factor(cyl), gear = as.factor(gear)) |>
select(cyl, gear) |>
# ctable(cyl, gear) # gives error
ctable() # no error