Как запустить программу loop R быстрее? - PullRequest
0 голосов
/ 09 февраля 2019

Я использую следующие r code для вычисления логарифмического правдоподобия для левой и правой сторон для каждого i = 1,2,...,200.

Но я хочу выполнить эту процедуру для большого числа сгенерированных наборов данных, например, a = 10000, и повторить весь цикл 1000 раз.Как я могу ускорить следующую программу?Могу ли я использовать функцию apply вместо функции for?

Заранее спасибо!

n1 = 100
n2 = 100
a = 1000 
n= n1 + n2
# number of simulated copies of y
  sim.data = matrix(NA, nrow = n, ncol = a)
  for (i in 1:a) {
    #for(j in 1:a){
    sim.data[,i] = c(rnorm(n1, 2, 1), rnorm(n-n1, 4, 1))
    #}
  }
  dim(sim.data)


  # Compute the log-likelihood
  B = ncol(sim.data)
  loglike_profb = matrix(NA, n - 1, B)
  for (j in 1:B) {
    for (i in 1:(n - 1)) {
      loglike_profb[i, j] = -0.5*(sum(((sim.data[1:i,j]) - mean(sim.data[1:i,j]))^2) + sum(((sim.data[(i + 1):n,j]) - mean(sim.data[(i +1):n,j]))^2))
    }
  }

1 Ответ

0 голосов
/ 10 февраля 2019

Вы можете поместить вычисление loglike_profb в функцию, а затем использовать mapply

loglike_profb_func <- function(i,j){
  -0.5*(sum(((sim.data[1:i,j]) - mean(sim.data[1:i,j]))^2) + sum(((sim.data[(i + 1):n,j]) - mean(sim.data[(i +1):n,j]))^2))
}
mapply(loglike_profb_func, rep(1:(n-1),B), rep(1:B,(n-1)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...