2012-09-09 30 views
1

我寫中的R的函數,將計算二項式分佈和正態分佈之間的平方之和,並作爲p總是收到INF值時,我一個數組

的功能顯示數據運行一個函數以下是我有:

首先,我產生的概率爲p隨機二項式分佈(N = 100)

random_binom<-rbinom(100,100,p)

接下來,我發現一些隨機的因素有EQUA概率升或小於值NP(平均值),並根據正態分佈

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

然後,在分佈的隨機值將具有比值等於或小於的概率的sqrt(np(1-p))標準偏差平均根據二項分佈

d_binom<-dbinom(random_binom,100,p)

最後我兩者相減,取平方,並將其返回。

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

現在在控制檯中,我創建了這一切功能:

的MyFunction:

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其中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 

這意味着每個元素包含其他元素,使得以圖形非常困難。

回答

3

的問題是,當p是0,你的功能將有效地做到這一點:

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

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


lapply返回list。您可以使用unlist轉換爲數組。假設您將lapply調用的結果分配給L。然後,你可以這樣做

unlist(L) 
+0

而不是使用'unlist',你可以使用'sapply'而不是'lapply'。 –

相關問題