Ctable в R не работает с собственными каналами?

Я вижу странность с функцией 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
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
0
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

|> вставляет левую часть в первый аргумент правой части (или в позицию аргумента _, если она указана), но в ctable нет аргумента, который задокументирован для принятия фрейма данных. Используйте with с любой трубкой (|> или %>%):

library(dplyr)
library(summarytools)

mtcars |>
  mutate(cyl = as.factor(cyl), gear = as.factor(gear)) |>
  with(ctable(cyl, gear))

Спасибо! Думаю, я переоценил ctable, что приму фрейм данных, поскольку во вступительной части говорилось, что функции работают с |> и %>%. Было бы неплохо, если бы эта виньетка была более конкретной.

Shawn Janzen 02.09.2024 19:33

Другие вопросы по теме