如何在R中找到向量及其负数的所有组合?
例如:
例如:
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)
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.call
和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
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
,该函数返回所有可能的组合。
获取参数的一种稍微简单的方法是使用as.data.frame(rbind(x, -x))
代替lapply(x, function(y) c(y, -y))
。
expand.grid(Map(c, x, -x))
library(gtools)
。gtools::combinations(8,4, c(-4:-1,1:4))