[英]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 个不同的列表,如下所示:
换句话说,返回的列表(我的函数的输出)应该基于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
我们可以用rep
来split
的list
成list
的lists
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.