我正在做一個模擬研究,我寫了下面的R代碼。無論如何編寫這個代碼,而不使用兩個for
循環,或使其更有效率(運行速度更快)?如何使此R代碼(for循環)更有效?
S = 10000
n = 100
v = c(5,10,50,100)
beta0.mle = matrix(NA,S,length(v)) #creating 4 S by n NA matrix
beta1.mle = matrix(NA,S,length(v))
beta0.lse = matrix(NA,S,length(v))
beta1.lse = matrix(NA,S,length(v))
for (j in 1:length(v)){
for (i in 1:S){
set.seed(i)
beta0 = 50
beta1 = 10
x = rnorm(n)
e.t = rt(n,v[j])
y.t = e.t + beta0 + beta1*x
func1 = function(betas){
beta0 = betas[1]
beta1 = betas[2]
sum = sum(log(1+1/v[j]*(y.t-beta0-beta1*x)^2))
return((v[j]+1)/2*sum)
}
beta0.mle[i,j] = nlm(func1,c(1,1),iterlim = 1000)$estimate[1]
beta1.mle[i,j] = nlm(func1,c(1,1),iterlim = 1000)$estimate[2]
beta0.lse[i,j] = lm(y.t~x)$coef[1]
beta1.lse[i,j] = lm(y.t~x)$coef[2]
}
}
第二for
迴路用於nlm
功能內部的功能func1
(查找MLE當誤差噸分佈)。 我想在R中使用parallel
包,但我沒有找到任何有用的功能。
你能描述一下你想達到的目標嗎?即循環**應該做什麼,以及你期望的輸出是什麼? – SymbolixAU
一點也不清楚爲什麼你在循環中定義func1,而不是將j,x作爲參數傳遞給它 – dww
'lineprof'可能有助於找到最慢的步驟。 – mt1022