2013-10-11 2 views
0

Я пытаюсь создать цикл, который изменяет имя для каждой итерации. Код показан ниже. Так что я в основном нуждаюсь, например, для a = 2, я хочу, чтобы W_ (a-1) ссылался на матрицу W_1, W_ (a), чтобы ссылаться на матрицу W_1 и, наконец, GMM_ (a-1) $ par должен относиться к GMM_ (1) $ par.Переименование матрицы и скаляра в цикле

for (a in 2:100){ 
    GMM <- function(beta) { 
     for (i in 1:(nrow(gmm_i))){ 
      gmm_i[i,] <- g_beta(i,beta) 
     } 
     gmm_N <- t(colSums(gmm_i)) %*% W_(a-1) %*% colSums(gmm_i) 
     W_(a) <<- solve((1/(nrow(A)/5))*t(gmm_i)%*%gmm_i)      
     return(gmm_N) 
    } 
    GMM_(a)<-optim(GMM_(a-1)$par,GMM) 
} 

Надеюсь, мой вопрос имеет смысл.

Спасибо.

+0

Посмотрите на 'assign'? – juba

+0

Сделайте свою жизнь проще и используйте списки. – Roland

+0

Я начал использовать R неделю назад. Можете ли вы рассказать о моей текущей проблеме? –

ответ

0

Вы хотите, чтобы в вашем рабочем пространстве было 100 переменных (a1, a2 ....)? Будет лучше, если вы поместите все это в список, поскольку он будет прост в использовании. Но если по какой-то причине вы хотите кучу переменных затем использовать это,

W_1 = 0 
for (a in 2:100){ 
    GMM <- function(beta) { 
    for (i in 1:(nrow(gmm_i))){ 
     gmm_i[i,] <- g_beta(i,beta) 
    } 
    gmm_N <- t(colSums(gmm_i)) %*% W_(a-1) %*% colSums(gmm_i) 
    tmp <- solve((1/(nrow(A)/5))*t(gmm_i)%*%gmm_i) 
    assign((paste("W_",a,sep="")),tmp,envir=.GlobalEnv) 
    return(gmm_N) 
    } 
    tmp1 <- optim(GMM_(a-1)$par,GMM) 
    assign((paste("GMM_",a,sep="")),tmp1,envir=.GlobalEnv) 

GMM_ (а) < - }

Дайте W_1 соответствующее значение.

Смежные вопросы