在R中将未知长度的序列拆分为一定数量的集合

在R中将未知长度的序列拆分为一定数量的集合,r,R,我有一个长度不同的序列,例如: items <- 1:4 等。集合内的排列并不重要,即集合{1,2,3}与{2,1,3)相同。集合不能为空 我能想到的最好办法(使用包combinat中的permn)是: n有一个“集合”包: require(sets) power_set(1:4) sapply( set_power(1:4) , function(x) set_complement(x ,as.set(1:4)) ) list( Set_A = as.list(set_power(1:

我有一个长度不同的序列,例如:

items <- 1:4
等。集合内的排列并不重要,即集合{
1
2
3
}与{
2
1
3
)相同。集合不能为空

我能想到的最好办法(使用包
combinat
中的
permn
)是:


n有一个“集合”包:

require(sets)
power_set(1:4)
sapply( set_power(1:4) , function(x) set_complement(x ,as.set(1:4)) )
list( Set_A = as.list(set_power(1:4)), 
      Set_B = sapply( set_power(1:4) , function(x) set_complement(x ,as.set(1:4)) ) )

它包括像({1,2,3,4},{})这样的配对,这从集合论的观点来看是正确的,但是您可能希望将它们作为“退化”来消除。(现在可以通过递归处理Set_B结果将其推广到更大的N了。)

这里还有另一种方法,可以帮助您:

# Params
n <- 2
items <- 1:4

# Sample
l <- lapply(items, function(x) combn(items, x, simplify=F))
l <-unlist(l, recursive=F)

# devide into sets
tmp <- 1:length(l)
tmp <- split(tmp, sample(1:n, length(l), replace=T))

sets <- lapply(tmp, function(x) l[x])
#参数
N
require(sets)
power_set(1:4)
sapply( set_power(1:4) , function(x) set_complement(x ,as.set(1:4)) )
list( Set_A = as.list(set_power(1:4)), 
      Set_B = sapply( set_power(1:4) , function(x) set_complement(x ,as.set(1:4)) ) )
# Params
n <- 2
items <- 1:4

# Sample
l <- lapply(items, function(x) combn(items, x, simplify=F))
l <-unlist(l, recursive=F)

# devide into sets
tmp <- 1:length(l)
tmp <- split(tmp, sample(1:n, length(l), replace=T))

sets <- lapply(tmp, function(x) l[x])