【问题标题】:Understanding Vectorized Code In R理解 R 中的向量化代码
【发布时间】:2018-08-11 00:12:15
【问题描述】:

我正在尝试使用 R 来理解这个问题的答案,但我遇到了很多困难。

可以使用此代码找到 R 代码的数据集

library(devtools)
install_github("genomicsclass/GSE5859Subset")
library(GSE5859Subset)
data(GSE5859Subset) ##this loads the three tables you need

问题来了

编写一个函数,该函数接受一个值向量 e 和一个编码两个组的二进制向量组,并从 t 检验返回 p 值:t.test( e[group==1], e[group= =0])$p.value.

现在将 g 定义为像这样 g 的代码案例 (1) 和控件 (0)

接下来使用函数apply对geneExpression的每一行进行t检验并获得p值。在所有这些 t 检验中,最小的 p 值是多少?

给出的答案是

myttest <- function(e,group){
    x <- e[group==1]
    y <- e[group==0]
    return( t.test(x,y)$p.value )
    }
g <- factor(sampleInfo$group)
pvals <- apply(geneExpression,1,myttest, group=g)
min( pvals ) 

这给了你 1.406803e-21 的答案。

运行时 myttest 函数的“e”参数的输入究竟是什么?是否可以将这个函数写成像

这样的公式
t.test(DV ~ sampleInfo$group)

t 检验是比较 24 个人的基因表达值(我认为这些值在“geneExpression”矩阵中)与他们属于哪个组 您可以在其中找到 sampleInfo 的“组”列。我已经在 R 中运行了很多次测试,但由于某种原因,我无法完全理解这段代码中发生的事情。

【问题讨论】:

    标签: r vectorization apply


    【解决方案1】:

    你的问题似乎是关于理解函数apply()

    技术描述见?apply

    我的快速解释:您问题中的apply() 代码行将以下函数应用于geneExpression 的每一行

    myttest(e=x, group=g)
    

    其中x 是每一行的占位符。

    为了帮助理解它,apply() 行的 for 循环版本看起来像:

    N <- nrows(geneExpression)   #so we don't have to type this twice
    pvals <- numeric(N)          #empty vector to store results
    
    # what 'apply' does (but it does it very quickly and with less typing from us)
    for(i in 1:N) {
        pvals[i] <- myttest(geneExpression[i,], group=g[i])
    }
    

    【讨论】:

    • 这太棒了!谢谢!一个问题。不是group=g 不是g[i] 吗?
    • 也许吧。我实际上并没有从 github 安装包,所以我只是在猜测各种对象中的数据。
    猜你喜欢
    • 1970-01-01
    • 2015-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多