vlambda博客
学习文章列表

R语言-循环(loop)线性模型

R语言-循环(loop)线性模型

    在生物信息或者神经科学领域的数据分析中, 因为需要比较案例(case)组与对照(control)组的多项变量(指标, 测量等), 因此编程时需要写循环去进行执行多次比较.

    正如在MATLAB中使用矩阵运算才是最优选择, 在R语言中许多重复计算应该善于利用apply/sapply/lapply等函数才是最高效的选择.

    下面利用一个实例进行分析. 数据为mydata, 数据格式有313个变量, 包括组别Groups, 年龄Age和性别Sex以及308个靶点变量. 现在的目的是比较组间的308个靶点变量, 同时控制年龄和性别. 以下分别使用循环和apply函数进行.

##使用循环构建5-313列变量的多元线性模型t <- proc.time() for (i in 5:313) { lms[[i-4]] = lm(mydata[,i] ~ Groups + Age + Sex, data = mydata) }proc.time() - t# 用户 系统 流逝# 0.90 0.02 1.5
##使用lapply函数构建5-313列变量的多元线性模型t <- proc.time() lms <- lapply(5:313, function(x) lm(mydata[,x] ~ Groups + Age + Sex,                                     data = mydata))proc.time() - t# 用户 系统 流逝# 0.76 0.00 1.01

    尽管从结果来看, 运行速度都是在1秒多, 但是对于更加大型的数据, 比如上千上万维的大样本数据, 这种方法的优越性会更加明显, 除此自外, 使用apply的代码更加简洁和易读.