2014-03-05 35 views
0

我非常感謝以下代碼的任何幫助。我已經編寫了一個代碼來通過重複數據集(單獨和根據每個患者ID)擬合線性迴歸線。我真正想要的是能夠提取大於0.05的p值的名稱/ id。用於線性迴歸的for循環的命名輸出

id <- c("A1", "A1","A1", "B10", "B10", "B10","B10", "B10", "C100", "C100", "C100", 
"G100", "G100", "G100") 

weight <- rnorm(14, 70) 

height <- rnorm(14, 1.7) 

A <- data.frame(id, weight, height) 


model1 <-function(weight, height){ 
anything<-lm(weight~height) 
res<-round(summary(anything)$coefficients[, 4], 3) 
res 
} 


model2<-function(weight,height){ 
res<-c() 
for(i in unique(A$id)){ 
    res2<-model1(A[A$id == i,]$weight, A[A$id == i,]$height) 
    res<-c(res,res2) 
} 

res 
} 

現在的問題是,我想根據所述數據幀A(即A1,B10,C100和G100)中給出的IDS來命名輸出(RES)。我試過添加names(res) <- unique(A$id),但這並不能給我真正想要的東西。請注意,我並不是很擅長編寫循環,因此任何改進我的代碼的建議都會受到熱烈的歡迎。 我希望問題很清楚,但如果不是,我會很樂意回答任何問題。

回答

3

c()可以採取命名輸入。例如,如果我想創建一個名稱xy一個載體,我可以這樣做是這樣的:

c(x = 1, y = 2) 

在你的情況,當你追加res2,你將它命名爲:

res <- c(res, name = res2) 

其中name是你想給它的名字。

請注意,在循環之前預先分配矢量要有效得多。

+0

感謝您的回答。我如何確保來自A $ id的名稱被標記爲結果?請注意,我的原始數據比這更大,所以我不能手動完成。 –

+2

初始化/預分配容器的結果是這樣的:'ids < - unique(A $ id)'; 'res < - vector(length(ids),mode =「list」)'; '名字(res)< - ids';然後在循環中執行'res [[i]] < - model1(A ...'。 – fabians

+0

@fabians,你的建議完美地工作 - 正是我想要的。謝謝你,真的我的一天! –