1

我正在用 R 编写一个函数,它将计算二项分布和正态分布之间的平方和,并将数据显示为p

这是我所拥有的:

首先,我生成概率为 p (n=100) 的随机二项式分布

random_binom<-rbinom(100,100,p)

sqrt(np(1-p))接下来,我根据正态分布找到某个随机元素等于或小于值 np(均值)和标准差的概率

d_norm<-dnorm(random_binom,p*100,sqrt(100*p*(1-p)))

然后根据二项式分布,分布中的随机值等于或小于均值的概率

d_binom<-dbinom(random_binom,100,p)

最后,我将两者相减,取平方并返回。

result<-sum((d_norm-d_binom)^2) return(result)

现在在控制台中,我为所有这些创建了一个函数:

我的功能:

function(p){
random_binom<-rbinom(100,100,p)
d_norm<-dnorm(random_binom,p*100,sqrt(100*p*(1-p)))
d_binom<-dbinom(random_binom,100,p)
result<-sum((d_norm-d_binom)^2)
return(result)
}

我想为 p where 传递一个向量p<-(c(0:99)/100),但是每当我这样做时,函数都会返回

inf

而不是一个值向量。我怎样才能让 R 返回一个值向量以便我可以绘制它们?我曾尝试使用 lapply 但它以一种奇怪的格式返回数据:

[[95]]
[1] 0.01064091

[[96]]
[1] 0.01418807

[[97]]
[1] 0.02647295

[[98]]
[1] 0.05065813

[[99]]
[1] 0.1179141

[[100]]
[1] 0.7342808

这意味着每个元素都包含另一个元素,因此很难绘制图表。

4

1 回答 1

3

问题是当p为 0 时,您的函数将有效地执行此操作:

dnorm(0, 0, 0)
[1] Inf

也许你想要p<-(c(1:99)/100)


lapply返回一个list。您可以使用unlist转换为数组。假设您将lapply调用的结果分配给L. 然后,你可以这样做

unlist(L)
于 2012-09-09T12:48:56.727 回答