2016-07-04 11 views
0

ich ein Problem habe, wenn eine Funktion erstellen, die die lm() Funktion aufruft:Erstellen neue Funktionen mit linearer Regression in R:

Dann rufe ich es Daten aus einem Datenrahmen unter Verwendung von I eine zuvor (DATOS ...)

regresionLineal(Estatura, Largo, Ancho, DATOS) 

Fehler bei eval (ausdr, envir, enclos): Objekt 'estatura' nicht gefunden Called: eval (ausdr, envir, enclos)

Jede Hilfe ist willkommen ...

+2

Da die Formelschnittstelle nicht benannte Namen verwendet, müssten Sie sie als solche übergeben, was, ehrlich gesagt, kompliziert ist. (Im Moment denkt R, dass Sie versuchen, Objekte zu übergeben, auf die sich die [Spalten] -Namen beziehen, die außerhalb des data.frames nicht existieren.) Es ist tatsächlich einfacher, eine ganze Formel als Parameter zu übergeben. – alistaire

Antwort

1

sollten Sie tun:

regresionLineal <- function (vardep, varindep1, varindep2, DATA) { 
    lm(paste(vardep, "~", varindep1, "+", varindep2), data = DATA) 
    } 

, wo Sie in vardep passieren, varindep1, varindep2 als Strings. Als Beispiel verwende ich R-interne trees-Datensatz:

regresionLineal("Height", "Girth", "Volumn", trees) 
# Call: 
# lm(formula = paste(vardep, "~", varindep1, "+", varindep2), data = DATA) 

# Coefficients: 
# (Intercept)  Girth  Volume 
#  83.2958  -1.8615  0.5756 

Allerdings sehe ich nicht, warum wir das tun plagen. Wenn wir jede Variable in der Formel angeben müssen, geben Sie einfach eine vollständige Formel ein. Und in diesem Fall können Sie lm() direkt verwenden, ohne eine eigene Funktion zu definieren.

+0

Vielen Dank, nun, ich muss nicht sagen, dass ich auch noch eine andere Funktion auf meiner Formel ansprechen muss, deswegen habe ich das getan. Jedenfalls war 'lm' der härtere. –