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的代码更加简洁和易读.