2015-02-10 20 views
5

Dưới đây là 4 bộ dữ liệu (Tôi vừa tạo chúng một cách ngẫu nhiên vì mục đích cung cấp mã có thể tái tạo). Tôi tạo ra một danh sách các vì vậy tôi có thể áp dụng "lm" với những nhiều bộ dữ liệu cùng một lúc.áp dụng lm cho nhiều bộ dữ liệu

H<-data.frame(replicate(10,sample(0:20,10,rep=TRUE))) 
C<-data.frame(replicate(5,sample(0:100,10,rep=FALSE))) 
R<-data.frame(replicate(7,sample(0:30,10,rep=TRUE))) 
E<-data.frame(replicate(4,sample(0:40,10,rep=FALSE))) 

dsets<-list(H,C,R,E) 
models<-lapply(dsets,function(x)lm(X1~.,data=x)) 
lapply(models,summary) 

Các biến trong mỗi bộ dữ liệu khác nhau (trong số cũng như tên Tuy nhiên, nếu bạn chạy mã tất cả chúng sẽ là x1, x2..vv ..). Cột/biến đầu tiên trong mỗi cột sẽ là đáp ứng và phần còn lại sẽ là các biến độc lập.

Mã này hoạt động nhưng không hoạt động trên tập dữ liệu thực tế của tôi. Vì bộ dữ liệu của tôi có tên thực tế cho các biến, tôi đã sử dụng vị trí của biến thay vì như sau:

dsets<-list(H,C,R,E) 
    models<lapply(dsets,function(x)lm(x[,1]~.,data=x)) 
    lapply(models,summary) 

Sử dụng ở trên, kết quả sẽ bị làm sai lệch. Nó cũng bao gồm biến đáp ứng như biến độc lập.

Có ai hỗ trợ không?

EDIT: Tôi nhận ra rằng x [1] đang kêu gọi toàn bộ cột và không phải là tên cột

models<lapply(dsets,function(x)lm(colnames(x)[1]~.,data=x)) 
    lapply(models,summary) 

nhưng điều này không làm việc, hoặc. Tôi nhận được lỗi sau

Error in model.frame.default(formula = colnames(H[1]) ~ ., data = H, drop.unused.levels = TRUE) : 
    variable lengths differ (found for 'Var1') 

Trả lời

1
models <- lapply(dsets, 
      function(data){ 
       lm(reformulate(termlabels=".", response=names(data)[1]), data) 
      }) 

reformulate cho phép bạn xây dựng một công thức từ character chuỗi.

+0

Awsome! điều này làm việc tốt. Nhưng bạn có thể cho tôi biết điều gì sai với mã của tôi không? và termlabels = "." làm? – oivemaria

+0

Ok, trông giống như termlabels = "." chỉ đang nói sử dụng tất cả các biến trong tập dữ liệu – oivemaria

+0

@oivemaria Yup bạn đã nhận được nó! – stanekam

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