Глядя на код plotMA
, мы видим, что несколько переменных создаются и используются для построения. Однако эти переменные не возвращаются.
Теперь вы можете скопировать и вставить функцию, чтобы написать собственную функцию, которая строит графики и возвращает данные. Это, однако, подвержено ошибкам, если есть новая версия функции, вы можете полагаться на старый код.
Итак, вместо этого вы можете использовать trace
для вставки произвольного кода в plotMA
, в частности, некоторый код, который хранит данные в вашей глобальной среде. Я иллюстрирую идею на игрушечном примере:
f <- function(x) {
y <- x + rnorm(length(x))
plot(x, y)
invisible()
}
Если бы мы хотели использовать y
в этой функции, мы могли бы сделать что-то вроде этого
trace(f, exit = quote(my_y <<- y))
# [1] "f"
ls()
# [1] "f"
f(1:10)
# Tracing f(1:10) on exit
ls()
# [1] "f" "my_y"
И теперь мы можем получить доступ к my_y
.
Что вы должны сделать:
- Посмотрите на код
plotMA
- Укажите, какая часть данных вам нужна (например,
x
, y
и sel
)
- Использование
trace(plotMA, exit = quote({my_data <<- list(x, y, sel)}), where = asNamespace("limma"))
- Пробег
plotMA
- Доступ к данным через
my_data
Примечание. Проверьте ?trace
, чтобы полностью понять возможности этого. В частности, если вы хотите внедрить свой код не в конце (exit
), а в другой позиции (возможно, из-за того, что промежуточные переменные перезаписаны и вам нужны первые результаты), для которых вам нужно будет использовать параметр at
trace
Обновление
Возможно, проще всего получить полный дамп всех локальных переменных, определенных в функции:
trace("plotMA", exit = quote(var_dump <<- mget(ls())), where = asNamespace("limma"))