洗牌向量 - 样本()的所有可能结果?

2024-03-03

我有一个包含五个项目的向量。

my_vec <- c("a","b","a","c","d")

如果我想将这些值重新排列到一个新的向量中(随机播放),我可以使用sample():

shuffled_vec <- sample(my_vec)

简单 - 但sample()函数只给我一种可能的洗牌。如果我想知道怎么办all可能的洗牌组合?各种“combn”函数似乎没有帮助,expand.grid() 给了我所有可能的组合with当我需要时更换without替代品。做到这一点最有效的方法是什么?

请注意,在我的向量中,我有两次值“a” - 因此,在返回的洗牌向量集中,它们都应该在集合中都有两次“a”。


I think permn从组合包中可以满足您的需求

library(combinat)
permn(my_vec)

一个较小的例子

> x
[1] "a" "a" "b"
> permn(x)
[[1]]
[1] "a" "a" "b"

[[2]]
[1] "a" "b" "a"

[[3]]
[1] "b" "a" "a"

[[4]]
[1] "b" "a" "a"

[[5]]
[1] "a" "b" "a"

[[6]]
[1] "a" "a" "b"

如果重复项是一个问题,您可以执行类似的操作来消除重复项

strsplit(unique(sapply(permn(my_vec), paste, collapse = ",")), ",")

或者可能是删除重复项的更好方法......

dat <- do.call(rbind, permn(my_vec))
dat[duplicated(dat),]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

洗牌向量 - 样本()的所有可能结果? 的相关文章

随机推荐