创建均匀分布函数

  • 本文关键字:函数 分布 创建 r
  • 更新时间 :
  • 英文 :


我尝试在r中创建一个均匀分布函数


fx_uniforme <- function(x,a,b) {
Fx <- 0
for (i in 0:x) {
Fx <- Fx + (a:(b-a+1))/(b-a+1)

}

return(Fx)

}
uniforme_sim <- function(F,...) {
x <- 0
u <- runif(1)
while (F(x, ...) < u) {
x <- x + 1
}
return(x)
}
uniforme_sim(fx_uniforme,1,10)
m <- 1000
a <- 1
b <- 10 
Ya <- array(NA, dim = m)
for (i in 1:m) {

Ya[i] <- uniforme_sim(fx_uniforme,a,b)
}
Ya
barplot(table(Ya))

当我绘图时,不是从1到10,而是从0到9。我该怎么做才能解决这个问题?

这可以通过在uniforme_sim函数中用return(1 + x)代替return(x)来解决。

另外,我认为您希望fx_uniforme函数中的Fx <- Fx + 1/(b-a+1)消除警告"条件具有长度"。">

更重要的是,您需要认识到R将每个变量存储为向量,并且大多数函数都将在向量上工作。然后利用它来消除这里所有的循环。

你可以用:

m <- 1000
a <- 1
b <- 10 
Ya <- sample(a:b, m, replace = TRUE)
barplot(table(Ya))

最新更新