gpt4 book ai didi

r - 对包含 mapply 和输出列表的用户定义函数使用复制

转载 作者:行者123 更新时间:2023-12-04 11:23:14 25 4
gpt4 key购买 nike

我可以使用以下 MyFun(用户定义)函数来模拟观察。但是无法弄清楚如何在函数返回输出列表时使用 replicate 函数重复此函数。

MyFun <- function(nSim, Size, Prob) {
M1 <- t(mapply(rbinom, prob = Prob, n = nSim, size = Size))
dimnames(M1) <- list(Prob, paste0("V", 1:nSim))
MeanM1 <- M1/Size
Results1 <- list(M1, MeanM1)
return(Results1)
}

MyFun(nSim=5, Size=4, Prob=c(0.2, 0.4))

[[1]]
V1 V2 V3 V4 V5
0.2 2 2 1 2 1
0.4 2 3 0 3 1

[[2]]
V1 V2 V3 V4 V5
0.2 0.5 0.50 0.25 0.50 0.25
0.4 0.5 0.75 0.00 0.75 0.25

但是 replicate 函数没有给出预期的结果。

replicate(
n=2
, MyFun(nSim=5, Size=2, Prob=c(0.2, 0.4))
, simplify = "array"
)

[,1] [,2]
[1,] Integer,10 Integer,10
[2,] Numeric,10 Numeric,10

最佳答案

尝试向您的函数添加一个简化参数,并将其传递给 mapply()

MyFun <- function(nSim, Size, Prob, simplify = "array") {
M1 <- t(
mapply(rbinom, prob = Prob, n = nSim, size = Size, SIMPLIFY = simplify)
)
dimnames(M1) <- list(Prob, paste0("V", 1:nSim))
MeanM1 <- M1/Size
Results1 <- list(M1, MeanM1)
return(Results1)
}

然后像这样调用它,在 replicate() 中使用 simplify = FALSE。这将生成一个长度为 2 的列表,每个元素包含两个数组。

replicate(2, MyFun(nSim=5, Size=2, Prob=c(0.2, 0.4)), simplify = FALSE)

[[1]]
[[1]][[1]]
V1 V2 V3 V4 V5
0.2 1 0 2 0 0
0.4 2 0 1 1 0

[[1]][[2]]
V1 V2 V3 V4 V5
0.2 0.5 0 1.0 0.0 0
0.4 1.0 0 0.5 0.5 0


[[2]]
[[2]][[1]]
V1 V2 V3 V4 V5
0.2 0 0 0 0 1
0.4 2 1 1 1 0

[[2]][[2]]
V1 V2 V3 V4 V5
0.2 0 0.0 0.0 0.0 0.5
0.4 1 0.5 0.5 0.5 0.0

关于r - 对包含 mapply 和输出列表的用户定义函数使用复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31774707/

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