gpt4 book ai didi

r - 生成矩阵/使用外部

转载 作者:行者123 更新时间:2023-12-04 18:36:45 24 4
gpt4 key购买 nike

我是一个新的(大约 1 天大)R 用户。我试图生成三掷六面骰子的所有 216 个结果。关键是然后对每个三元组应用一些函数(例如,最大面值)。这是我想出的:

mat <- matrix(numeric(0), ncol=3)
for (i in 1:6) {
for (j in 1:6) {
for (k in 1:6) {
mat <- rbind(mat, c(i, j, k))
}
}
}

# find maximum of each outcome
apply(mat, 1, max)

有没有更好、更简洁的方法来用 R 做到这一点?
我很想使用 outer这边走:
outer(1:6, outer(1:6, 1:6, max), max)

但它因错误而失败

Error in outer(1:6, 1:6, max) : dims [product 36] do not match the length of object [1]

最佳答案

我们可以使用 expand.griddata.frame 中创建组合,转换为 matrix并通过rowMaxs得到每行的最大值来自 library(matrixStats) .

library(matrixStats)
rowMaxs(as.matrix(expand.grid(rep(list(1:6),3))))
#[1] 1 2 3 4 5 6 2 2 3 4 5 6 3 3 3 4 5 6 4 4 4 4 5 6 5 5 5 5 5 6 6 6 6 6 6 6 2
#[38] 2 3 4 5 6 2 2 3 4 5 6 3 3 3 4 5 6 4 4 4 4 5 6 5 5 5 5 5 6 6 6 6 6 6 6 3 3
#[75] 3 4 5 6 3 3 3 4 5 6 3 3 3 4 5 6 4 4 4 4 5 6 5 5 5 5 5 6 6 6 6 6 6 6 4 4 4
#[112] 4 5 6 4 4 4 4 5 6 4 4 4 4 5 6 4 4 4 4 5 6 5 5 5 5 5 6 6 6 6 6 6 6 5 5 5 5
#[149] 5 6 5 5 5 5 5 6 5 5 5 5 5 6 5 5 5 5 5 6 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 6
#[186] 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6

或者我们可以使用 pmaxexpand.grid
do.call(pmax, expand.grid(rep(list(1:6),3)))

或者按照@Ben Bolker 的建议,我们也可以使用 applyMARGIN=1
apply(expand.grid(rep(list(1:6),3)),1,max) 

另一种选择是 outerpmax .
c(outer(1:6, outer(1:6, 1:6, FUN=pmax), FUN= pmax))
#[1] 1 2 3 4 5 6 2 2 3 4 5 6 3 3 3 4 5 6 4 4 4 4 5 6 5 5 5 5 5 6 6 6 6 6 6 6 2
#[38] 2 3 4 5 6 2 2 3 4 5 6 3 3 3 4 5 6 4 4 4 4 5 6 5 5 5 5 5 6 6 6 6 6 6 6 3 3
#[75] 3 4 5 6 3 3 3 4 5 6 3 3 3 4 5 6 4 4 4 4 5 6 5 5 5 5 5 6 6 6 6 6 6 6 4 4 4
#[112] 4 5 6 4 4 4 4 5 6 4 4 4 4 5 6 4 4 4 4 5 6 5 5 5 5 5 6 6 6 6 6 6 6 5 5 5 5
#[149] 5 6 5 5 5 5 5 6 5 5 5 5 5 6 5 5 5 5 5 6 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 6
#[186] 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6

outerVectorize d max
f1 <- function(x,y) max(x,y)
c(outer(1:6, outer(1:6, 1:6, Vectorize(f1)), Vectorize(f1)))

关于r - 生成矩阵/使用外部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33708762/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com