了解R

时间:2018-08-11 00:12:15

标签: r vectorization apply

我正在尝试使用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定义为代码盒(1)和控件(0),例如g <-factor(sampleInfo $ group)

接下来使用函数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中运行了很多次t测试,但是由于某些原因,我无法全神贯注于这段代码中发生的事情。

1 个答案:

答案 0 :(得分:-1)

您的问题似乎与了解功能apply()有关。

有关技术说明,请参见?apply

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

myttest(e=x, group=g)

其中x是每行的占位符。

为帮助理解这一点,该for行的apply()循环版本应类似于:

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])
}