#r #limma
#r #лимма
Вопрос:
Я хотел бы использовать plotMA
функцию limma
.
Пример документации работает нормально:
A <- runif(1000,4,16)
y <- A matrix(rnorm(1000*3,sd=0.2),1000,3)
status <- rep(c(0,-1,1),c(950,40,10))
y[,1] <- y[,1] status
plotMA(y, array=1, status=status, values=c(-1,1), hl.col=c("blue","red"))
Теперь я хотел бы получить доступ к базовым данным, которые используются для графика, поскольку я хотел бы использовать данные в другом контексте, а не только в графике. В настоящее время я не вижу способа получить доступ к данным; конечно, я мог бы сам реализовать метод и использовать только данные, но это кажется неправильным.
Есть ли способ получить доступ к базовым данным, используемым для графика MA?
Ответ №1:
Глядя на код 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
чтобы полностью понять его возможности. В частности, если вы хотите ввести свой код не в end ( exit
), а в другой psoition (возможно, потому, что промежуточные переменные перезаписываются, и вам нужны первые результаты), для которых вам нужно будет использовать at
параметр trace
Обновить
Может быть, проще всего получить полный дамп всех локальных переменных, определенных в функции:
trace("plotMA", exit = quote(var_dump <<- mget(ls())), where = asNamespace("limma"))
Комментарии:
1. Хорошо, попробую это, а затем свяжусь с вами, если мне удастся (проголосовать / принять).
2. Глупый вопрос, но какой самый быстрый способ просмотреть исходный код? Я попробовал
limma::plotMA
и несколько других вариантов, но безуспешно. Как вы это сделали?3. Я даже не мог установить библиотеку
limma
в первую очередь, но я посмотрел код на GitHub4. Причина, по которой я не смог его установить:
Depends: R (<= 2.5.1)
, какую древнююR
версию вы используете? :-O5. Я сделал обновление, возможно, самым безопасным будет сохранить все локальные переменные в списке, а затем просто взять те, которые вам нужны