我想使用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图的基础数据?
答案 0 :(得分: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
以完全了解它的可能性。特别是,如果您不想在代码末尾(exit
处注入代码,而是在另一个位置(可能是因为中间变量被覆盖并且需要第一个结果)注入代码,则需要使用{{1 at
更新
也许最简单的方法是获取函数中定义的所有局部变量的完整转储:
trace