Я вижу странность с функцией ctable()
из пакета R summarytools и пытаюсь понять, не упускаю ли я что-то здесь.
Во введении к таблице указано: «Операторы каналов из magrittr (%>%, %$%) и PipeR (%>>%) полностью поддерживаются; также поддерживается собственный |>, представленный в R 4.0».
Использование собственного канала работает как и ожидалось для функций freq()
и descr()
.
Однако с родной трубой для ctable()
у меня беда. Если я использую собственный канал, я получаю Error: object 'ObjectName' not found
, где ObjectName является одной из переменных в функции ctable()
. Он не работает с обычной магриттровой трубкой. Тем не менее, ctable()
работает, если я переключусь на трубку экспонирования магриттра %$%
. Я не нашел разницы, если добавить спецификации аргументов x= и y=.
Еще одна странность в этом беспорядке заключается в том, что ctable()
работает с собственным каналом, ЕСЛИ я уменьшаю фрейм данных, выбирая только два столбца, которые мне нужны для ctable()
. Однако в этом случае мне придется удалить имена столбцов из ctable()
, иначе я получу ошибку; кроме того, имена столбцов, которые печатаются в результатах, выглядят ужасно и бесполезны.
Я что-то упускаю? Разве ctable()
не должен работать так же, как freq()
или descr()
при использовании родной трубы или обычной магриттровой трубы?
Для тех, кому интересно, почему в моих примерах есть as.factor()
, насколько я знаю, ctable()
все еще имеет проблему PrettyNum при использовании числовых значений — см. 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
|> вставляет левую часть в первый аргумент правой части (или в позицию аргумента _, если она указана), но в ctable
нет аргумента, который задокументирован для принятия фрейма данных. Используйте with
с любой трубкой (|> или %>%):
library(dplyr)
library(summarytools)
mtcars |>
mutate(cyl = as.factor(cyl), gear = as.factor(gear)) |>
with(ctable(cyl, gear))
Спасибо! Думаю, я переоценил
ctable
, что приму фрейм данных, поскольку во вступительной части говорилось, что функции работают с |> и %>%. Было бы неплохо, если бы эта виньетка была более конкретной.