Możesz także użyć kombinacji funkcji formulai paste.
Skonfiguruj dane : wyobraźmy sobie, że mamy ramkę data.frame, która zawiera zmienne predykcyjne x1do x100i naszą zmienną zależną y, ale istnieje także zmienna uciążliwa asdfasdf. Również zmienne predykcyjne są ułożone w takiej kolejności, że nie wszystkie są ciągłe w ramce data.frame.
Data <- data.frame(matrix(rnorm(102 * 200), ncol=102))
names(Data) <- c(paste("x", 1:50, sep=""),
"asdfasdf", "y", paste("x", 51:100, sep=""))
Wyobraź sobie również, że masz ciąg znaków zawierający nazwy zmiennych predykcyjnych. W takim przypadku można to łatwo utworzyć za pomocą pastefunkcji, ale w innych sytuacjach greplub w celu uzyskania tego ciągu można zastosować inne podejście.
PredictorVariables <- paste("x", 1:100, sep="")
Zastosuj podejście : Możemy następnie zbudować formułę w następujący sposób:
Formula <- formula(paste("y ~ ",
paste(PredictorVariables, collapse=" + ")))
lm(Formula, Data)
- te
collapsewkładki argumentów +pomiędzy predyktorami
formulakonwertuje ciąg znaków na obiekt o wzorze klasowym odpowiednim dla lmfunkcji.
Mówiąc bardziej ogólnie, używam następującej funkcji dość regularnie, gdy chcę podać zmienne predykcyjne jako wektor nazw zmiennych.
regression <- function(dv, ivs, data) {
# run a linear model with text arguments for dv and ivs
iv_string <- paste(ivs, collapse=" + ")
regression_formula <- as.formula(paste(dv, iv_string, sep=" ~ "))
lm(regression_formula, data)
}
Na przykład,
regression("y", PredictorVariables, Data)