【问题标题】:All combinations of vector and its negatives in RR中向量及其负数的所有组合
【发布时间】:2015-03-24 13:20:14
【问题描述】:

如何在 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)

【问题讨论】:

    标签: r vector combinations


    【解决方案1】:

    您可以使用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.gridexpand.grid 返回所有可能的组合。

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        使用library(gtools)

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

        【讨论】:

        • 我认为这不太对。例如,其中一个输出是-4 -1 1 4,而我认为不应该涉及重复
        • @Dason 你的观点让我认为最初的问题不清楚。 “向量及其负数的所有组合”对我来说就是我所说的。
        • 我同意。目前尚不完全清楚问题中所需输出的, ..., 部分中的内容
        • @RichardScriven 不,这并不完全模棱两可,但看起来他们基本上只是想为 (+/- 1, +/- 2, +/- 3, +/- 4) 生成所有可能性
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-20
        • 2018-03-24
        • 1970-01-01
        • 2022-07-15
        • 2014-04-14
        • 1970-01-01
        相关资源
        最近更新 更多