我正在做一个模拟研究,我写了下面的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