Расширение ggplot: повторное использование аргументов в нескольких слоях - PullRequest
0 голосов
/ 06 ноября 2018

Я разработал пакет R для оценки параметров фармакометрических моделей. Эти модели предсказывают концентрацию лекарства в организме человека с течением времени. Я сейчас разрабатываю хорошую библиотеку для этого.

Мой идеальный API выглядел бы очень похоже на ggplot. Первоначальное определение данных и последующие слои для добавления графических элементов.

ggplot(model, observed=observations, treatment=paracetamol) +
  stat_observations(geom="point") +
  stat_prediction(geom="line") +
  stat_prediction_se(geom="ribbon", level=0.95, nsimulations=500)

Я могу создавать новые объекты Stat (например, StatPrediction), которые создают правильный data.frame для прохождения через базовый geom. Однако этому объекту Stat необходим доступ к исходной модели для имитации новых данных! Я изо всех сил пытаюсь выбрать лучший способ реализовать это ...

  1. Используйте fortify() для создания «бога» data.frame со всей информацией, которая нам когда-либо может понадобиться. Я мог бы использовать broom::tidy() и для этого. Это неуклюже однако; Я не знаю аргумента nsimulations заранее, поэтому не знаю, сколько симуляций модели я должен выполнить.
  2. Используйте fortify(), чтобы создать «фальшивый» data.frame, и используйте attr(data, "model") <- model, чтобы добавить мою оригинальную модель в data.frame. Используйте функцию computeLayer, чтобы вернуть этот оригинальный объект в объект StatPrediction. Это кажется «хакерским»; ggplot предназначен для работы с верным data.frame, а не с моей собственной версией одного ...
  3. Реализация ggplot.myModel, которая создает специальный объект ggplot со слотом для модели. Реализуйте ggplot_add.StatPrediction(object, plot, object_name), так как это единственный способ получить оригинальный объект plot и найти модель.

Кто-нибудь еще выполнял чистую реализацию подобной проблемы?

...