如何获取 MA 图的底层数据?
How to get the underling data of a MA plot?
我想使用limma
的plotMA
功能。
文档示例工作正常:
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
。
你应该做什么:
- 看
plotMA
的代码
- 确定您需要哪部分数据(例如
x
、y
和 sel
)
- 使用
trace(plotMA, exit = quote({my_data <<- list(x, y, sel)}), where = asNamespace("limma"))
- 运行
plotMA
- 通过
my_data
访问数据
注意。 查看 ?trace
以充分了解它的可能性。特别是,如果您不想在最后(exit
)而是在另一个 psoition(可能因为中间变量被覆盖并且您需要第一个结果)注入您的代码,您需要使用 at
trace
的参数
更新
也许最简单的方法是获取函数中定义的所有局部变量的完整转储:
trace("plotMA", exit = quote(var_dump <<- mget(ls())), where = asNamespace("limma"))
我想使用limma
的plotMA
功能。
文档示例工作正常:
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
。
你应该做什么:
- 看
plotMA
的代码
- 确定您需要哪部分数据(例如
x
、y
和sel
) - 使用
trace(plotMA, exit = quote({my_data <<- list(x, y, sel)}), where = asNamespace("limma"))
- 运行
plotMA
- 通过
my_data
访问数据
注意。 查看 ?trace
以充分了解它的可能性。特别是,如果您不想在最后(exit
)而是在另一个 psoition(可能因为中间变量被覆盖并且您需要第一个结果)注入您的代码,您需要使用 at
trace
更新
也许最简单的方法是获取函数中定义的所有局部变量的完整转储:
trace("plotMA", exit = quote(var_dump <<- mget(ls())), where = asNamespace("limma"))