У меня возникли проблемы с пониманием функции 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», возвращая «список», поэтому я считаю, что у меня правильные типы объектов. Благодарю вас!
Если вы хотите xyplot(Ozone ~ Day, airquality2) с обычной решеткой, это сработает. Вы сталкиваетесь с крайним случаем, когда общая форма xyplot делает разные вещи в зависимости от того, что вы передаете в качестве первого параметра. mice версия xyplot не следует той же конвекции, что и метод «по умолчанию», который сначала ожидает формулу.





Помните, что в 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)
Оба из них приводят к:
airquality2— это фрейм данных, в то время какxyplotфункция из пакетаmiceтребует объекта «mids»: rdocumentation.org/packages/mice/versions/3.14.0/topics/…