2016-08-08 8 views
1

I in R verwenden expand.grid wollen, aber es haben sich über zwei im Voraus festgelegten Vektoren arbeiten und einer beliebigen verbleibenden Menge:erweitern Gitter für eine beliebige Anzahl von Vektoren in R

Beispiel zwei Vektoren d und w, und 3 Vektoren der Länge 4:

M = expand.grid(d = 1:3, w = 1:3, rep(list(1:4),(3))) 

das Problem ist, dass es denkt, dass das letzte, was ein Objekt ist, und ich möchte es Var3, Var4 und Var5 haben. Stattdessen erhalten wir:

M 
    d w  Var3 
1 1 1 1, 2, 3, 4 
2 2 1 1, 2, 3, 4 
3 3 1 1, 2, 3, 4 
4 1 2 1, 2, 3, 4 
5 2 2 1, 2, 3, 4 
6 3 2 1, 2, 3, 4 
7 1 3 1, 2, 3, 4 

Interessanterweise, wenn ich es ohne die ersten beiden Vektoren alleine tun, kann es expandgrid:

M = expand.grid(rep(list(1:4),(3))) 

    Var1 Var2 Var3 
1  1 1 1 
2  2 1 1 
3  3 1 1 
4  4 1 1 
5  1 2 1 
6  2 2 1 
7  3 2 1 
... 

Antwort

2

Wenn Sie ?expand.grid überprüfen und einen Blick auf die Parameter übernehmen, heißt es:

...
Vektoren, Faktoren oder eine Liste diese enthält.

Es scheint nicht wie es akzeptiert gemischte Vektoren und Listen. Verketten der Vektoren und Liste, um eine einzige Liste als Parameter zu erstellen funktioniert:

M = expand.grid(c(list(d = 1:3, w = 1:3), rep(list(1:4), 3))) 
M 
# d w Var3 Var4 Var5 
#1 1 1 1 1 1 
#2 2 1 1 1 1 
#3 3 1 1 1 1 
#4 1 2 1 1 1 
#5 2 2 1 1 1 
#6 3 2 1 1 1 
# ... 
+0

Warum setzen Sie d und w in separate Listen? – AlexR

+0

@AlexR Guter Punkt. Ich muss nicht. Aber das wird das Ergebnis nicht beeinflussen. – Psidom

Verwandte Themen