代码之家  ›  专栏  ›  技术社区  ›  compbiostats

在R中使用split()和append()组合偶数和奇数列表

  •  0
  • compbiostats  · 技术社区  · 3 年前

    考虑以下MWE:

    x <- rnorm(100) # generate values
    k <- 4 # number of groups
    
    y <- split(x, 1:k) # split values into k groups
    y
    
    # combine even and odd lists
    for (i in 1:length(y)) {
      for (j in 1:length(y)) {
        if ((i %% 2 == 1) && (j %% 2 == 0)) {
         res <- append(y[[i]], y[[j]])
        }
      }
    }
    
    res
    

    以上工作除

    (1) 只有中的列表3和4中的元素 y 包括在内,因为值在的第二次传递过程中被重写 for

    (2) 我想修改上面的循环,以便 res 返回列表列表(与返回列表的方式相同 split() 。就是这样 物件 应包含一个包含 y[[1]] y[[2]] ,以及第二个列表,其中包含 y[[3]] y[[4]] .

    2 回复  |  直到 3 年前
        1
  •  1
  •   Onyambu    3 年前

    您要查找的内容:

    split(y, gl(2,2))
    

    如果你不知道的长度 y 使用前:

    split(y, gl(length(y)/2,2))
    

    如果你只想要赔率和赔率:

    split(y, 1:2)