Построение с использованием xyplot()

У меня возникли проблемы с пониманием функции xyplot() для создания графиков в R. Ниже у меня есть пример кода R, который создает хороший график.

install.packages("mice")
library("mice")
data <- airquality[, c("Ozone", "Solar.R")]
# Applies regression imputation to Ozone w.r.t Solar.R
imp <- mice(data, method = "norm.predict", seed = 1,
           m = 1, print = FALSE)
xyplot(imp, Ozone ~ Solar.R)

Приведенный выше код создает это изображение по желанию: вывод code1

Но приведенный ниже код не создает хороший график и вместо этого дает мне сообщение об ошибке «Ошибка в UseMethod («xyplot»): нет применимого метода для «xyplot», примененного к объекту класса «data.frame»"

airquality2 <- tidyr::fill(airquality, Ozone)
xyplot(airquality2, Ozone ~ Day)

Почему это происходит? Я запутался, применяя функцию typeof() как к «imp», так и к «airquality2», возвращая «список», поэтому я считаю, что у меня правильные типы объектов. Благодарю вас!

airquality2 — это фрейм данных, в то время как xyplot функция из пакета mice требует объекта «mids»: rdocumentation.org/packages/mice/versions/3.14.0/topics/…
Basti 09.05.2022 15:22

Если вы хотите xyplot(Ozone ~ Day, airquality2) с обычной решеткой, это сработает. Вы сталкиваетесь с крайним случаем, когда общая форма xyplot делает разные вещи в зависимости от того, что вы передаете в качестве первого параметра. mice версия xyplot не следует той же конвекции, что и метод «по умолчанию», который сначала ожидает формулу.

MrFlick 09.05.2022 15:27
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
31
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Помните, что в R универсальные функции вызывают определенный метод в зависимости от атрибута class объекта, переданного в качестве первого аргумента. Это известно как Отправка S3. «Класс» объекта — это не то же самое, что его режим хранения или внутренний тип, который возвращает typeof. Поэтому тот факт, что typeof(imp) == typeof(airquality2), не имеет значения.

xyplot — это общая функция, заимствованная из пакета lattice. Сам пакет lattice определяет только методы для классов formula и ts. У него нет метода для фреймов данных.

Причина, по которой xyplot работает с imp, переданным в качестве первого аргумента, заключается в том, что imp является объектом класса "mids", а метод xyplot.mids определен как (неэкспортированная) функция в mice, поэтому для него доступен метод является.

В результате, поскольку метод доступен для объектов класса «формула», вы можете легко построить airquality2, передав формулу в качестве первого аргумента:

xyplot(Ozone ~ Day, airquality2)

Или явно указать аргумент данных:

xyplot(data = airquality2, Ozone ~ Day)

Оба из них приводят к:

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