如何获取 MA 图的底层数据?

How to get the underling data of a MA plot?

我想使用limmaplotMA功能。

文档示例工作正常:

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 图的基础数据?

查看 plotMA 的代码,我们看到创建了几个变量并用于绘图。但是这些变量不会返回。

您现在可以复制并粘贴该函数来编写您自己的函数,该函数绘制和 returns 数据。但是,这很容易出错,如果有新版本的功能,您可能会依赖旧代码。

所以你可以做的是使用 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. 的代码
  3. 确定您需要哪部分数据(例如 xysel
  4. 使用trace(plotMA, exit = quote({my_data <<- list(x, y, sel)}), where = asNamespace("limma"))
  5. 运行 plotMA
  6. 通过my_data
  7. 访问数据

注意。 查看 ?trace 以充分了解它的可能性。特别是,如果您不想在最后(exit)而是在另一个 psoition(可能因为中间变量被覆盖并且您需要第一个结果)注入您的代码,您需要使用 at trace

的参数

更新

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

trace("plotMA", exit = quote(var_dump <<- mget(ls())), where = asNamespace("limma"))