Si potrebbe utilizzare do.call
e expand.grid
:
do.call(expand.grid, lapply(x, function(y) c(y, -y)))
# Var1 Var2 Var3 Var4
# 1 1 2 3 4
# 2 -1 2 3 4
# 3 1 -2 3 4
# 4 -1 -2 3 4
# 5 1 2 -3 4
# 6 -1 2 -3 4
# 7 1 -2 -3 4
# 8 -1 -2 -3 4
# 9 1 2 3 -4
# 10 -1 2 3 -4
# 11 1 -2 3 -4
# 12 -1 -2 3 -4
# 13 1 2 -3 -4
# 14 -1 2 -3 -4
# 15 1 -2 -3 -4
# 16 -1 -2 -3 -4
Il codice lapply(1:4, function(x) c(x, -x))
crea un elenco di ogni elemento della vostra vettoriale e il suo negativo; nel tuo caso questo sarebbe list(c(1, -1), c(2, -2), c(3, -3), c(4, -4))
. Quindi, do.call
passa ognuno di questi elementi di elenco come argomenti a expand.grid
, che restituisce tutte le combinazioni possibili.
Un modo leggermente più semplice per ottenere gli argomenti potrebbe essere quello di utilizzare as.data.frame(rbind(x, -x))
anziché lapply(x, function(y) c(y, -y))
.
Io non credo che questo è giusto. Ad esempio, uno degli output di questo è '-4 -1 1 4' mentre non penso che dovrebbero esserci duplicati coinvolti – Dason
@Dason il tuo punto mi fa pensare che la domanda originale non sia chiara. "Tutte le combinazioni di un vettore e dei suoi negativi" per me significa ciò che ho inserito. –
Sono d'accordo. Non è completamente chiaro cosa c'è nella parte ', ...,' dell'output desiderato nella domanda –