R中向量及其负数的所有组合

All combinations of vector and its negatives in R

如何在 R 中找到一个向量及其负数的所有组合?

I.E.

x <- c(1,2,3,4)

会输出

(1,2,3,4), (-1,2,3,4), (1,-2,3,4), (1,2,-3,4), (1,2,3,-4), ... , (-1,-2,-3,-4)

您可以使用 do.callexpand.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

代码 lapply(1:4, function(x) c(x, -x)) 创建一个列表,其中包含向量的每个元素及其负数;在您的情况下,这将是 list(c(1, -1), c(2, -2), c(3, -3), c(4, -4))。然后 do.call 将这些列表元素中的每一个作为参数传递给 expand.grid,其中 returns 所有可能的组合。

获取参数的一种稍微简单的方法是使用 as.data.frame(rbind(x, -x)) 而不是 lapply(x, function(y) c(y, -y))

使用library(gtools)

gtools::combinations(8,4, c(-4:-1,1:4))

或者@josilber 解决方案的变体是

 expand.grid(Map(c, x, -x))