存储函数的结果

时间:2014-03-05 18:25:47

标签: r

您好我已经完成了一项基本功能(我对R来说很新)。

analyse <- function(gene_set,probe_ids) {
    Xprobe_ids <- mapply(function(k) paste('X',k,sep=''), probe_ids)
    model_1_formula_str  = 'Status ~ Age + Sex + Source';
    model_1 <- glm(as.formula(model_1_formula_str), data = fcA, family = "binomial");
    model_2_formula_str = model_1_formula_str;
    for (next_id in probe_ids) {
        model_2_formula_str = paste(model_2_formula_str, ' + X',next_id,sep = '')
    }
    model_2 <- glm(as.formula(model_2_formula_str), data = fcA, family = "binomial");
    gene_pval = anova(model_2,model_1, test="Chisq")[2,5];
    probe_id_str <- paste(probe_ids,collapse=',');
    probe_num <- length(probe_ids);
    c(gene_set,gene_pval,probe_num,probe_id_str,);
}

问题出现了,

for (next_id in probe_ids) {
    model_2_formula_str = paste(model_2_formula_str, ' + X',next_id,sep = '')
}

基本上我想分析模型1与模型2,模型2针对每个不同的基因进行更改。然而,我通过循环发送模型2,只是简单地改变model_2_formula_str到达最终基因,然后进行分析。

我想知道的是,如何进行分析存储结果呢?然后转到下一个基因做同样的事情,依此类推?

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

应该使用lapply

制作模型列表
strings <- c()
for (next_id in probe_ids) {

    strings = c(strings, paste(model_2_formula_str, ' + X',next_id,sep = ''))

}

mods <- lapply(strings, FUN = function(x) {
    glm(as.formula(x), data = fcA, family = "binomial") })

然后迭代您的模型列表以进行您想要的比较

gene_pvals = lapply(mods, FUN = function(x) {
    anova(x, model_1, test="Chisq")[2,5]
})