gpt4 book ai didi

r - 如何在 R 中编写分段函数进行一些模拟并将值存储在数据框中

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:14:45 24 4
gpt4 key购买 nike

我需要编写一个分段函数的代码,并将生成的值存储在数据框中。规则如下:

  • 我有一个由伯努利 (1/3) 生成的对象 X。
  • 如果 X=0,则另一个对象 Y 由 E = Exponential(1) 生成。
  • 如果 X=1,如果 E <= P,Y 由 E 生成,如果 E > P,则由 (P + EL) 生成,其中 P 是常数(例如 1)且 EL = Exponential(Lambda) 独立来自 E.
  • 我想生成一个数据帧,其中包含使用此方法获得的 100 个 X 和 Y 样本,此外,执行此过程 10000 次(或者换句话说,生成 10000 个数据帧)。

我试图做这样的事情,但由于我是 R 的新手,我无法弄清楚如何正确定义每个元素,显然,如何将我的结果存储在数据框中。

这是我做的“代码”:

test <- function(lambda,p) {
for (i in 1:10000) { # Number of simulations that I want to do.
for(j in 1:100) { # Sample size of each simulation / data frame.
x <- rbinom(1,1,1/3)
e <- rexp(1,1)
if (x==0) {y <- e}
else {
if (e<=p) {y <- e}
else {y <- p + rexp(1, lambda)}
}
}
}

但即使在测试之前我就知道它不可能正常工作。我只想制作的数据框可能包含 X 和 Y 的值。

我知道这可能是一个非常基本的问题,所以非常感谢您的回答。

最佳答案

我认为:

simfun <- function(n=100,lambda=1,P=1,ret.df=TRUE) {
X <- rbinom(n,prob=1/3,size=1)
E <- rexp(n,1)
EL <- rexp(n,lambda)
Y <- ifelse(X==0,E,
ifelse(E<=P,E,P+E*EL))
## return data frame or matrix
if (ret.df) data.frame(X,Y) else cbind(X,Y)
}
system.time(res <- replicate(1e4,simfun(),simplify=FALSE))
## 6 seconds

## or:
library(plyr)
system.time(res2 <- raply(1e4,simfun(ret.df=FALSE),.progress="text")
## returns a 1e4 x 100 x 2 array, maybe more convenient: use
## rlply instead of raply (and ret.df=TRUE) to match the previous
## results

关于r - 如何在 R 中编写分段函数进行一些模拟并将值存储在数据框中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17736139/

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