如何获得MA图的基础数据?

时间:2019-04-09 12:11:56

标签: r limma

我想使用limma的{​​{3}}功能。

文档示例运行正常:

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 个答案:

答案 0 :(得分:1)

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

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

因此,您可以使用traceplotMA插入任意代码,特别是一些将数据存储在全局环境中的代码。我通过一个玩具示例来说明这个想法:

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

注意。签出?trace以完全了解它的可能性。特别是,如果您不想在代码末尾(exit处注入代码,而是在另一个位置(可能是因为中间变量被覆盖并且需要第一个结果)注入代码,则需要使用{{1 at

的}}参数

更新

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

trace