我正在模拟数据并在R中使用for循环填充矩阵。目前循环运行速度比我想要的要慢。我已经做了一些工作来向量化一些变量来提高循环速度,但它仍然需要一些时间。我相信加速循环分配数据到矩阵R中
mat[j,year] <- sum(vec==1)/x
循环的一部分正在放慢速度。我更加高效地研究了填充矩阵,但找不到任何东西来帮助解决当前的问题。最终,这将作为一个闪亮的应用程序的一部分,所以我分配的所有变量将需要轻松分配不同的值。
任何意见,以加快循环或更有效地写这个循环将不胜感激。
这里是循环:
#These variables are all specified because they need to change with different simulations
num.sims <- 20
time <- 50
mat <- matrix(nrow = num.sims, ncol = time)
x <- 1000
init <- 0.5*x
vec <- vector(length = x)
ratio <- 1
freq <- -0.4
freq.vec <- numeric(nrow(mat))
## start a loop
for (j in 1:num.sims) {
vec[1:init] <- 1; vec[(init+1):x] <- 2
year <- 2
freq.vec[j] <- sum(vec==1)/x
for (i in 1:(x*(time-1))) {
freq.1 <- sum(vec==1)/x; freq.2 <- 1 - freq.1
fit.ratio <- exp(freq*(freq.1-0.5) + log(ratio))
Pr.1 <- fit.ratio*freq.1/(fit.ratio*freq.1 + freq.2)
vec[ceiling(x*runif(1))] <- sample(c(1,2), 1, prob=c(Pr.1,1-Pr.1))
## record data
if (i %% x == 0) {
mat[j,year] <- sum(vec==1)/x
year <- year + 1
}}}