Почему при вызове graphics :: plot объект hexbin выдает ошибку? - PullRequest
2 голосов
/ 17 февраля 2020

Короче говоря: я пытаюсь запустить этот пример гексбина , который работает нормально, если я не заменю plot на graphics::plot. Последний выдает следующую ошибку:

> graphics::plot(bin, main="" , colramp=my_colors , legend=F )
Error in as.double(y) :
  cannot coerce type 'S4' to vector of type 'double'

Как заставить это работать?

Более широкий контекст, почему мне нужна эта работа таким образом. Я участвую в проекте clojisr , который переводит R в Clojure с помощью RServe. Существует возможность требовать пакеты R и создавать соответствующие функции Clojure. Это хорошо работает (см. это или это ). Основные вызовы R имеют вид {package::symbol} для всего.

1 Ответ

3 голосов
/ 17 февраля 2020

Class hexbin - это класс S4, а пакет определяет обобщенный S4 c и метод для plot. (Исходный код здесь ). В пространстве имен пакета graphics нет универсального S4 c для plot, только универсальный S3 c.

Поэтому решение очень простое:

hexbin::plot(bin, main="" , colramp=my_colors , legend=F ) 

Вот пример, чтобы доказать это:

library(hexbin)
library(RColorBrewer)

# Create data
x <- rnorm(mean=1.5, 5000)
y <- rnorm(mean=1.6, 5000)

# Make the plot
bin<-hexbin(x, y, xbins=40)
my_colors=colorRampPalette(rev(brewer.pal(11,'Spectral')))
hexbin::plot(bin, main="" , colramp=my_colors , legend=F ) 

Создано в 2020-02-17 с помощью пакета prex (v0.3.0)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...