关于R中summarytools包ctable()与原生管道兼容问题的问询
R语言summarytools包ctable()函数管道使用异常问题
我在使用R语言summarytools包的ctable()函数时遇到异常,想确认是否存在操作疏漏。
根据summarytools官方文档说明:magrittr的管道运算符(%>%、%$%)和pipeR的(%>>%)均完全支持;R 4.0引入的原生管道(|>)也同样支持。
原生管道在freq()和descr()函数中使用符合预期,但在ctable()中出现问题:使用原生管道时会报错Error: object 'ObjectName' not found(其中ObjectName为ctable()中的变量之一),常规magrittr管道也无法正常工作。切换为magrittr爆炸管道%$%时,ctable()可正常运行,添加x=和y=参数指定也无改善。
另一个特殊情况:若将数据框筛选为仅包含ctable()所需的两列,原生管道可与ctable()配合使用,但此时必须省略ctable()中的列名(否则报错),且输出的列名格式混乱、无实用价值。
请问我是否遗漏了某些操作细节?ctable()在原生管道或常规magrittr管道下的表现难道不应与freq()或descr()一致吗?
关于示例中使用as.factor()的原因:ctable()处理数值型数据时仍存在PrettyNum问题,相关问题可参考项目GitHub及Stack Overflow上的讨论。
可复现代码
# 环境设置 library(summarytools) library(magrittr) library(dplyr) data("mtcars") # 以下操作均正常运行 freq(mtcars$cyl) mtcars |> freq(cyl) mtcars |> descr(qsec) mtcars |> subset(select=c(qsec, hp)) |> descr() # ctable无法配合原生管道或常规magrittr管道使用 mtcars |> mutate(cyl = as.factor(cyl), gear = as.factor(gear)) |> # mutate(cyl = as.factor(cyl), gear = as.factor(gear)) %>% ctable(cyl, gear) # ctable可配合爆炸管道正常运行 mtcars |> mutate(cyl = as.factor(cyl), gear = as.factor(gear)) %$% ctable(cyl, gear) # 若仅保留ctable所需的两列,原生管道可配合ctable使用,但输出格式异常 mtcars |> mutate(cyl = as.factor(cyl), gear = as.factor(gear)) |> select(cyl, gear) |> # ctable(cyl, gear) # 执行此代码会报错 ctable() # 无报错但输出格式有问题
内容的提问来源于stack exchange,提问作者Shawn Janzen
相关产品推荐
相关产品推荐

