2013-01-15 46 views
5

Volevo chiedere perché ottengo questo errore durante l'inizializzazione di un elenco di vettori di esempio o di un altro tipo e come posso risolverlo?Errore in `* tmp *` [[k]]: indice fuori limite in R

> l <- list() 
> l[[1]][1] <- 1 
Error in `*tmp*`[[1]] : subscript out of bounds 

Questo è tutto il codice che ho bisogno, in realtà io voglio un elenco di vettori come questo:

mcorrelation <- list() 
for(k in 1:7){ 
    for (ind in 1:7){ 
     mcorrelation[[k]][ind] <- co$estimate 
    } 
} 

Dovrei inizializzare l'intera lista in anticipo o c'è qualche altro modo per non ottenere questo errore?

risposta

4

Poiché l non ha già un vettore, non si desidera specificare una posizione nel primo elemento dell'elenco. Prova:

l <- list() 
l[[1]] <- 1 

Per l'aggiunta di ulteriori valori a luoghi specifici in questo nuovo vettore, è meglio impostare il vettore con la lunghezza nota di valori per essere depositata in (per motivi di velocità, vedere il motivo per cui here). Ecco un ciclo esempio:

n <- 100 
l <- list() 
l[[1]] <- NaN*seq(n) 
for(i in seq(n)){ 
    l[[1]][i] <- i 
} 

quanto riguarda la tua esempio specifico:

k <- 7 
ind <- 7 
mcorrelation <- vector(mode="list", k) 
for(i in seq(k)){ 
    mcorrelation[[i]] <- NaN*seq(ind) 
    for (j in seq(ind)){ 
     mcorrelation[[i]][j] <- rnorm(1) 
    } 
} 
mcorrelation 
+0

voglio avere un elenco di lunga vettori che si stanno inizializzando in un ciclo for. Quindi i prossimi passi sono l [[1]] [2] <- X, ... e poi l [[2]] [1] <- 1, ... – hora

+0

Mille grazie per la modifica. – hora

2

Il "[" funzione permette assegnazioni multiple senza loop:

> y <- NULL 
> y 
NULL 
> y[cbind(1:2, 1:2)] <- list(list(1,2), list(2,3)) 
> y 
[[1]] 
[[1]][[1]] 
[1] 1 

[[1]][[2]] 
[1] 2 


[[2]] 
[[2]][[1]] 
[1] 2 

[[2]][[2]] 
[1] 3