2011-10-12 26 views
15

Thay vì một số thứ như lm(bp~height+age, data=mydata) Tôi muốn chỉ định các cột theo số, không phải tên.Sử dụng các số cột không có tên trong lm()

Tôi đã thử lm(mydata[[1]]~mydata[[2]]+mydata[[3]]) nhưng vấn đề với điều này là, trong mô hình được trang bị, các hệ số được đặt tên mydata[[2]], mydata[[3]] v.v ... trong khi tôi muốn chúng có tên cột thực.

Có lẽ đây là một trường hợp không có bánh và ăn nó, nhưng nếu các chuyên gia có thể tư vấn cho dù đây là có thể, tôi sẽ biết ơn

+1

Bạn có thể nhận được câu trả lời tốt hơn nếu bạn đưa ra bối cảnh lớn hơn một chút cho những gì bạn đang cố gắng làm: "vấn đề bạn đang cố gắng giải quyết" là gì? –

+0

Cảm ơn nhận xét của bạn. Tôi có một số lượng lớn các cột trong một khung dữ liệu. Tôi đang lắp một mô hình tuyến tính bằng cách sử dụng một tập hợp con trong số này, sử dụng các kỹ thuật khác nhau bao gồm cả lựa chọn theo từng bước. Sẽ thuận tiện nếu tôi có thể tham khảo các cột theo số khi gọi lm() nhưng nếu có thể tôi muốn mô hình hiển thị tên cột. –

+1

Tôi sẽ dán cùng một công thức dựa trên tên, như trong: http://stackoverflow.com/questions/6877534/understanding-lm-and-environment/6878461#6878461 –

Trả lời

19
lm(
    as.formula(paste(colnames(mydata)[1], "~", 
     paste(colnames(mydata)[c(2, 3)], collapse = "+"), 
     sep = "" 
    )), 
    data=mydata 
) 

Thay vì c(2, 3) bạn có thể sử dụng bao nhiêu chỉ số bạn muốn (không cần cho vòng lặp).

+1

thiếu dấu phẩy ở cuối dòng thứ ba? –

+0

Cảm ơn, @Ben. Ngoài ra, có thể sử dụng 'as.formula' sẽ mạnh mẽ hơn, mặc dù không cần thiết cho' lm() '(nhưng đối với các mô hình khác). – TMS

+0

Cảm ơn bạn. Điều này giải thích những gì Ben Bolker đề xuất trước đó, và hoạt động hoàn hảo. –

Các vấn đề liên quan