У меня вопрос по ссылочным классам. Мой вопрос связан с пакетом R, который я разрабатываю rCharts. Он использует ссылочные классы для создания интерактивных графиков из R.

Создание сюжета предполагает серию звонков. Вот пример, где сначала создается диаграмма рассеяния, а затем добавляется линейный график.

p1 <- rPlot(mpg ~ cyl, data = mtcars, type = 'point')
p1$layer(copy_layer = T, type = 'line')

Теперь, поскольку ссылочный класс похож на закрытие, мне было интересно, можно ли регистрировать сделанные вызовы. Идея состоит в том, что если я могу регистрировать последовательность выполненных вызовов, то я могу автоматически вставлять исходный код, используемый для создания визуализации, вместе с html.

Я пытался понять, могу ли я использовать sys.function или match.call, но ничего не добился. Если кто-то может указать мне, как я могу подойти к этому, я был бы очень признателен.

5
Ramnath 19 Апр 2013 в 06:45
2
Решение должно быть справедливым: в каждом методе вам понадобится что-то вроде calls <<- c(calls, list(match.call()))
 – 
hadley
19 Апр 2013 в 16:31
Спасибо, отлично сработало! Возможно, мне стоит опубликовать это как другой вопрос, но каков рекомендуемый способ повторно запустить список вызовов.
 – 
Ramnath
19 Апр 2013 в 17:46
2
Просто eval() их - но если вы хотите это сделать, вам также потребуется захватить среду, в которой они были выполнены с помощью parent.frame()
 – 
hadley
19 Апр 2013 в 21:58
Спасибо! Я понял, что мне не нужно их оценивать, поскольку ссылочный класс e уже содержит вывод всех вызовов. Ведение журнала предназначено только для записи последовательности звонков. Если вы отправите сообщение в качестве ответа, я могу его принять. Спасибо еще раз.
 – 
Ramnath
19 Апр 2013 в 23:08

1 ответ

Лучший ответ

Как заявил @hadley:

calls <<- c(calls, list(match.call()))

Рад, что, похоже, сработало. Давай закроем это. :)

2
Thell 21 Июн 2013 в 22:15