R:具有相同向量的expand.grid重复多次

问题描述 投票:0回答:3

所以我试图获得滚动两个骰子

n
次数的所有可能组合。 目前我有:

# Get all possible rolls with two dice
d <- list(1, 2, 3, 4, 5, 6)
rolls <- lapply(apply(expand.grid(d, d), 1, identity), unlist)

# Get all possible ways to roll two dice twice
trials <-lapply(apply(expand.grid(rolls, rolls), 1, identity), unlist)

d
存储单个骰子上可以获得的所有可能值。
rolls
存储同时掷两个骰子的所有可能结果。
trials
存储同时掷两个骰子、连续两次的所有可能结果。

我可以将最后一行修改为

trials <-lapply(apply(expand.grid(rolls, rolls, rolls), 1, identity), unlist)

获得同时掷两个骰子的所有可能结果,连续三次,但我不知道如何使次数可变,以便我可以传递任意数字

n
并获得所有可能的结果同时掷两个骰子的结果,连续
n

r vector combinations
3个回答
1
投票

假设您想要排列(1,2 和 2, 1)而不是组合(仅 1,2),这更简单:

n <- 2
perms <- expand.grid(as.data.frame(matrix(1:6, 6, n)))
dim(perms)
# [1] 36  2
n <- 4
perms <- expand.grid(as.data.frame(matrix(1:6, 6, n)))
dim(perms)
#[1] 1296    4
n <- 6
perms <- expand.grid(as.data.frame(matrix(1:6, 6, n)))
dim(perms)
# [1] 46656     6

0
投票

我知道我大约 20 分钟前才发表这篇文章,但实际上我已经弄清楚了。解决办法是:

trials <-lapply(apply(expand.grid(rep(list(rolls), times = n)), 1, identity), unlist)

0
投票

在列表上使用

expand_grid
的 tidyverse 解决方案。列表中的第
k
条目是位置
k
中可能值的向量。在您的情况下,每个卷的选项向量都是相同的,因此我们使用
rep
生成列表。我们可以选择命名列表条目,以便输出更容易解释。要将列表条目作为参数注入到
expand_grid
中,我们使用
rlang
拼接运算符
!!!
但我们也可以使用
do.call
,请参阅此问题,了解如何使用列名称扩展所有列。

n <- 3 roll_options <- rep(list(1:6), n) names(roll_options) <- paste0("roll", seq_len(n)) expand_grid(!!!roll_options) # # A tibble: 216 × 3 # roll1 roll2 roll3 # <int> <int> <int> # 1 1 1 1 # 2 1 1 2 # 3 1 1 3 # 4 1 1 4 # 5 1 1 5 # 6 1 1 6 # 7 1 2 1 # 8 1 2 2 # 9 1 2 3 # 10 1 2 4 # # ℹ 206 more rows # # ℹ Use `print(n = ...)` to see more rows
    
© www.soinside.com 2019 - 2024. All rights reserved.