Wie werden Referenzvariablen nach Zeichenfolge in einer Formel verwendet?

Im folgenden minimalen Beispiel versuche ich, die Werte einer Zeichenfolge zu verwendenvars in einer Regressionsformel. Ich kann jedoch nur die Zeichenfolge der Variablennamen ("v2 + v3 + v4") an die Formel übergeben, nicht die tatsächliche Bedeutung dieser Zeichenfolge (z. B. "v2" ist dat $ v2).

Ich weiß, dass es bessere Möglichkeiten gibt, die Regression durchzuführen (z. B.lm(v1 ~ v2 + v3 + v4, data=dat)). Meine Situation ist komplexer und ich versuche herauszufinden, wie man eine Zeichenkette in einer Formel verwendet. Irgendwelche Gedanken?

Aktualisiert unter Code

# minimal example 
# create data frame
v1 <- rnorm(10)
v2 <- sample(c(0,1), 10, replace=TRUE)
v3 <- rnorm(10)
v4 <- rnorm(10)
dat <- cbind(v1, v2, v3, v4)
dat <- as.data.frame(dat)

# create objects of column names
c.2 <- colnames(dat)[2]
c.3 <- colnames(dat)[3]
c.4 <- colnames(dat)[4]

# shortcut to get to the type of object my full code produces
vars <- paste(c.2, c.3, c.4, sep="+")

### TRYING TO SOLVE FROM THIS POINT:
print(vars)
# [1] "v2+v3+v4"

# use vars in regression
regression <- paste0("v1", " ~ ", vars)
m1 <- lm(as.formula(regression), data=dat)

Update: @Arun stimmte über das fehlende "" anv1 im ersten Beispiel. Das hat mein Beispiel gefixt, aber ich hatte immer noch Probleme mit meinem echten Code. Im folgenden Codeabschnitt habe ich mein Beispiel angepasst, um meinen tatsächlichen Code besser widerzuspiegeln. Ich habe mich für ein einfacheres Beispiel entschieden, als ich zunächst dachte, das Problem sei die Zeichenfolgevars.

Hier ist ein Beispiel, das nicht funktioniert :) Verwendet denselben Datenrahmendat oben erstellt.

dv <- colnames(dat)[1]
r2 <- colnames(dat)[2]
# the following loop creates objects r3, r4, r5, and r6
# r5 and r6 are interaction terms
for (v in 3:4) {
  r <- colnames(dat)[v]
  assign(paste("r",v,sep=""),r)
  r <- paste(colnames(dat)[2], colnames(dat)[v], sep="*")
  assign(paste("r",v+2,sep=""),r)
}

# combine r3, r4, r5, and r6 then collapse and remove trailing +
vars2 <- sapply(3:6, function(i) { 
                paste0("r", i, "+")
                })
vars2 <- paste(vars2, collapse = '')
vars2 <- substr(vars2, 1, nchar(vars2)-1)

# concatenate dv, r2 (as a factor), and vars into `eq`
eq <- paste0(dv, " ~ factor(",r2,") +", vars2)

Hier ist das Problem:

print(eq)
# [1] "v1 ~ factor(v2) +r3+r4+r5+r6"

nicht wieregression im ersten Beispieleq führt keine Spaltennamen ein (z. B.v3). Die Objektnamen (z.B.r3) bleiben erhalten. Als solches das Folgendelm() Befehl funktioniert nicht.

m2 <- lm(as.formula(eq), data=dat)

Antworten auf die Frage(2)

Ihre Antwort auf die Frage