繁体   English   中英

如何在 r 中按降序将向量列表拆分为小列表

[英]How to splitting a list of vectors to small lists in decreasing order in r

假设我有一个函数,它返回一个包含多个向量的列表。 假设我想将此列表拆分为不同数量向量的小列表。 每个列表中向量的数量从一个列表到另一个列表是不同的。 我需要按降序创建这些列表。

一般示例:

假设我有n变量。 然后, k = n:2 我的函数将返回一个包含n(n-1)/2向量的列表。 那么,新的子列表的数量是n - 1 因此,我需要有n-1不同的列表。 每个列表中的向量数为J = 1:k-1

数值示例:

如果n=4 ,则k=4, 3, 2 ,则J=3,2,1 因此,我的函数将返回 6 个向量。 这些向量应该存储到不同的列表中。 每个列表中向量的数量基于J 因此,我将有 3 个不同的列表,如下所示:

  • 第一个列表中有 3 个向量。
  • 第二个列表中有 2 个向量。
  • 最后一个列表中的一个向量。

换句话说,返回的列表(我的函数的输出)应该基于J以降序拆分为子列表。

我的功能很复杂。 因此,我将提供一个包含 6 个向量的列表作为我的函数的输出。

假设我的函数返回以下列表:

x <- list(x1=c(1,2,3), x2=c(1,4,3), x3=c(3,4,6), x4=c(4,8,4), x5=c(4,33,4), x6=c(9,6,7))

如上所述,我如何将其拆分为子列表? 异常输出为:

x_sub1 <- list(x1=c(1,2,3), x2=c(1,4,3), x3=c(3,4,6))
x_sub2 <- list(x4=c(4,8,4), x5=c(4,33,4))
x_sub3 <- list(x6=c(9,6,7))

我试过这个:

x_sub <- list()
for(j in 1:(k-1)){
    x_sub[[j]] <- x[[i]]
    }

当然,这不是我所期望的。

有什么想法吗? 我如何为任意数量的向量生成它? 例如,我如何将分割思想应用于n向量?

非常感谢所有帮助。

x <- list(x1=c(1,2,3), x2=c(1,4,3), x3=c(3,4,6),
          x4=c(4,8,4), x5=c(4,33,4),
          x6=c(9,6,7))

您可以尝试使用split()函数按特定格式对列表x进行分区。 我不明白你对n , k , J ,所以你需要自己定义它们。 我只是简单地将J设置为1:3

J <- 1:3
breaks <- rep(J, rev(J)) # [1] 1 1 1 2 2 3
y <- split(x, f = breaks)
names(y) <- paste0("x_sub", J)
list2env(y, envir = .GlobalEnv)

x_sub1
x_sub2
x_sub3

我们可以用repsplitlistlistlists

lst <- split(x, rep(paste0("x_sub", 1:3), 3:1))

并使用名称提取嵌套list

lst[["x_sub1"]]

最好不要在全局环境中创建多个对象。 但是,如果需要,则使用list2env

list2env(lst, envir = .GlobalEnv)
x_sub1
#$x1
#[1] 1 2 3

#$x2
#[1] 1 4 3

#$x3
#[1] 3 4 6

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM