2015-02-10 20 views
5

Poniżej znajdują się 4 zestawy danych (właśnie je utworzono losowo w celu zapewnienia odtwarzalnego kodu). Stworzyłem listę tych więc mogę zastosować „LM” do tych wielu zestawów danych na raz.stosowanie lm do wielu zestawów danych

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) 

zmiennych w każdym z zestawów danych są różne (w liczbie, jak również nazw Jeśli jednak uruchomić kod będą wszystkie x1, x2.. i tak dalej). Pierwsza kolumna/zmienna w każdej będzie odpowiedzią, a resztą będą zmienne niezależne.

Ten kod działa, ale nie w moim rzeczywistym zestawie danych. Ponieważ moje zestawy danych mają rzeczywiste nazwy zmiennych, użyłem pozycji zmiennej, jak poniżej:

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

Powyższe wyniki są pomieszane. Obejmuje również zmienną odpowiedzi jako zmienną niezależną.

Czy ktoś może pomóc?

EDIT: zdałem sobie sprawę, że x [1] dzwoni całą kolumnę, a nie nazwę kolumny

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

ale to nie działa albo. I pojawia się następujący błąd

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

Odpowiedz

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

reformulate pozwala skonstruować formułę z character strun.

+0

Awsome! to działało dobrze. Ale czy mógłbyś mi powiedzieć, co było nie tak z moim kodem? i co to znaczy termlabels = "." robi? – oivemaria

+0

OK, wygląda jak termlabels = "." mówi tylko użycie wszystkich zmiennych w zestawie danych – oivemaria

+0

@ Yivemaria Yup masz to! – stanekam