Die Funktion stats::model.matrix
kann ein Eingangsdatenrahmens in eine Matrix geeignet für rohe algebraische Manipulation zur Umwandlung in der Lösung Regressionsgleichungen etc. Zum Beispiel verwendet werden:Wie produziert man nur den Schnittpunkt mit model.matrix?
set.seed(0)
df <- data.frame(a = rnorm(5), n = rnorm(5))
model.matrix(~., data = df)
produziert:
(Intercept) a n
1 1 1.2629543 -1.539950042
2 1 -0.3262334 -0.928567035
3 1 1.3297993 -0.294720447
4 1 1.2724293 -0.005767173
5 1 0.4146414 2.404653389
Einer der Features ist, dass es steuert, wie der Schnittpunkt der Entwurfsmatrix hinzugefügt wird. Vergleichen Sie: model.matrix(~ 0 + ., data = df)
vs model.matrix(~ 1 + ., data = df)
nun die .
in der Formel gibt an, dass alle Variablen von df
sollten einbezogen werden. Dies führt zu einem Problem, wenn ich wünsche einen leeren Datenrahmen passieren und somit nur die Abschnitte erstellen, zB:
df <- data.frame(matrix(, nrow=5, ncol=0))
model.matrix(~ ., data = df)
führt zu:
Error in terms.formula(object, data = data) :
'.' in formula and no 'data' argument
Wer weiß, wie dies zu umgehen, zu Spezifisch möchte ich das folgende Ergebnis von model.matrix(~ 1, data = df)
, mit Ausnahme der .
.
Wie wäre es mit 'if (ncol (df) == 0) model.matrix (~ 1, data = df) sonst model.matrix (~., Data = df)' – Gregor
das ist hilfreich und ist derzeit was ich bin dabei gibt es jedoch direktere Möglichkeiten, ein Objekt ohne die if-Anweisungen an die model.matrix zu übergeben. – Alex
Darf ich fragen, warum würden Sie ein leeres data.frame übergeben ?. Es ist seltsam, eine Formel aus dem Nichts zu machen. Sie können höchstens 1 Spalte data.frame mit 1s haben. Betrachten Sie diese 'model.matrix (~ 1, data = data.frame (rep (1,10)))' – DJJ