2015-04-03 45 views
1

我試圖每個變量相對上運行的線性迴歸循環至x X Y1 Y2 Y3通過列中的R

這是我使用

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 

我都想出瞭解決辦法,有沒有人有任何想法如何解決這個問題?

感謝

+0

什麼是你的迴歸模型?每一邊都有一個變量? – Soheil 2015-04-03 02:26:32

回答

4

要回答這個問題,我們必須以某種形式回答:「當爲R的名字不是的R的名字嗎?」答案是:「他們來自names-功能。」 names -function的結果不是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) 
    } 
+0

這非常完美,非常感謝你,我剛剛開始讓我的雙手沾溼R.我來自perl – 2015-04-03 02:45:29

+0

多年,所以你認爲現在使用此代碼的最佳方式,並通過所有文件* .out並將代碼應用於。我正在考慮像myfiles < - list.files(pattern =「*。out」) for(j in myfiles){ gen <-read.table(j,sep =「\ t」,header = TRUE )但它似乎並沒有這樣做 – 2015-04-03 10:12:59