【问题标题】:How to get the underling data of a MA plot?如何获取 MA 图的基础数据?
【发布时间】:2023-03-17 08:58:01
【问题描述】:

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

【问题讨论】:

    标签: r limma


    【解决方案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. 确定您需要哪一部分数据(例如xysel
    3. 使用trace(plotMA, exit = quote({my_data &lt;&lt;- list(x, y, sel)}), where = asNamespace("limma"))
    4. 运行plotMA
    5. 通过my_data访问数据

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


    更新

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

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

    【讨论】:

    • 好的,我会试试这个,如果我成功了会回复你(赞成/接受)。
    • 愚蠢的问题,但是查看源代码的最快方法是什么?我尝试了limma::plotMA 和其他几个选项,但没有成功。你是怎么做到的?
    • 一开始我什至无法安装库limma,但我在GitHub上查看了代码
    • 无法安装的原因:Depends: R (&lt;= 2.5.1),你用的是哪个古老的R版本? :-O
    • 我做了一个更新,也许最安全的方法是将所有本地变量存储在一个列表中,然后只取你需要的变量
    猜你喜欢
    • 1970-01-01
    • 2021-08-02
    • 1970-01-01
    • 1970-01-01
    • 2012-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-07
    相关资源
    最近更新 更多