循环遍历R中的列

时间:2015-04-03 02:05:38

标签: r loops linear-regression

我试图对每个相对于x的变量进行线性回归 x y1 y2 y3

这是我正在使用的代码

gen <-read.table("CH0032_time_soma.out",sep = "\t",header=TRUE)
dat<-gen[,c(1,3:1131)]

dat_y<-(dat[,c(2:1130)])
dat_x<-(dat[,c(1)])

for(i in names(dat_y)){

model = lm(i~dat_x,dat)
}

我一直收到此错误

Error in model.frame.default(formula = i ~ dat_x, data = dat, drop.unused.levels = TRUE) : 
  invalid type (list) for variable 'dat_x'
Calls: lm -> eval -> eval -> <Anonymous> -> model.frame.default
Execution halted

我完全没有尝试解决此问题,是否有人有任何想法如何解决这个问题?

由于

1 个答案:

答案 0 :(得分:4)

要回答这个问题,我们必须以某种形式回答:“R名称何时不是R名称?”答案是:“它们来自names - 函数。” names - 函数的结果不是R名称,而是R字符向量。在lm的第一个参数中的波浪号实际上是构建一个R公式对象,其最简单的形式有一个或两个R名称(也称为符号)。公式和名称/符号是“语言对象”,而数字和字符向量则不是。 (它们是文字,它们的值本身。)您需要使用as.formula在lm调用之外构建一个公式,或者您需要以lm函数可以将R名称与它们的数据匹配的方式传递列指向。

dat_y<-(dat[,c(2:1130)])
dat_x<-(dat[,c(1)])
models <- list()
#
for(i in names(dat_y)){
      y <- dat_y[i]
     model[[i]] = lm( y~dat_x )
    }