【问题标题】:cor.test function using apply for iterating x and y vectorscor.test 函数使用 apply 来迭代 x 和 y 向量
【发布时间】:2012-03-27 21:25:55
【问题描述】:

我正在尝试使用 cor.test 函数进行关联,如下所示:

对于对象mr中的每个字符串,我选择一个对象(mr1)并从表达式数据集中找到这个mr1对应的目标,并创建新对象mr.tgt。

现在,对于 mr.tgt 中的每个字符串,cor.test 在两个数值向量之间执行,1. 匹配 mr.tgt[i] 的基因表达值和 2. 匹配 mr1(或 mr 的 mirna 表达值[i])。

最后,为相关值写表。

mr <- c("1p","2p","3p",...)

mr.tgt.pval.function <- function(mr){
  file.out <- file.choose(new = TRUE)

  for(i in 1:length(mr)){        
    mr1 <- as.character(mr[i])
    mr.tgt <- c("a","b","c",..) # mr.tgt %in% mr = 0 & mr.tgt changes with each of mr1[i]

    for(i in 1:length(mr.tgt)){
      cor.result.pval <- cor.test(as.numeric(expr[which(rownames(expr) == mr.tgt[i]),]),
                        as.numeric(mir[which(rownames(mir) == mr1),]), 
                                   method="spearman", alternative="less", exact=NULL, continuity=T)
      write.table(cbind(mr1,mr.tgt[i],cor.result.pval$p.value,cor.result.pval$estimate[[1]]),file = file.out, sep="\t", na='', append=T,col.names=FALSE)
    }  
  }  
}

我正在尝试对 cor.test 使用 apply 函数,但在每个 mr[i] 中迭代每个 mr.tgt[i] 时遇到困难。

apply(?matched.expr.vector.mr.tgt.for.each.of.mr[i],
2,function(x) cor.test(?,?,method="spearman",alternative="l"))

我想看看我是否可以使用 apply 函数来克服 for 循环的缓慢数据处理。

非常感谢有用的提示。

谢谢!

【问题讨论】:

  • 外部和内部for循环都使用i。不是很好,但它实际上仍然可以按预期工作。
  • 您似乎使用了exprmir - 它们是什么,为什么它们不是函数的参数?
  • 感谢 Tommy 查看代码。 exprmir 是 data.frames,我分别从中提取与 mr.tgt(mirna 基因目标)和 mr1(mirna)匹配的表达式值。我应该切换到ij,而不是在两个循环中都保留i

标签: r correlation


【解决方案1】:

for 循环开销不太可能是瓶颈。我怀疑write.table 中的时间占主导地位,尽管cor.test 也可能很慢。

尝试注释掉write.table 部分,看看它变得多快。如果这“解决”了问题,请尝试在循环中组装表格并在之后编写它。

【讨论】:

    猜你喜欢
    • 2010-10-02
    • 2017-03-19
    • 2012-11-05
    • 2020-06-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多