0

我想使用 的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 图的基础数据?

4

1 回答 1

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.

你应该做什么:

  1. 看代码plotMA
  2. 确定您需要哪一部分数据(例如x和)ysel
  3. 采用trace(plotMA, exit = quote({my_data <<- list(x, y, sel)}), where = asNamespace("limma"))
  4. plotMA
  5. 通过访问数据my_data

笔记。 检查?trace以充分了解它的可能性。特别是,如果您想注入代码不是在exit末尾attrace


更新

也许最简单的方法是获取函数中定义的所有局部变量的完整转储:

trace("plotMA", exit = quote(var_dump <<- mget(ls())), where = asNamespace("limma"))
于 2019-04-09T12:36:46.510 回答