2013-01-15 21 views
5

Chciałem zapytać, dlaczego pojawia się ten błąd podczas inicjowania listy np. Wektorów lub innego typu i jak mogę to naprawić?Błąd w `* tmp *` [[k]]: Indeks dolny w R

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

To jest cały kod muszę, w rzeczywistości chcę listę wektorów takiego:

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

powinien zainicjować całą listę z góry czy jest jakiś inny sposób na nie coraz ten błąd?

Odpowiedz

4

Ponieważ l nie ma jeszcze wektora, nie chcesz określać pozycji w pierwszym elemencie listy. Spróbuj:

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

dla dodawania wartości do konkretnych miejsc w tym nowym wektorem, to najlepiej, aby ustawić wektor z znanej długości wartościami, które należy złożyć w (ze względów prędkości; dlaczego here). Oto przykład pętla:

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

Odnośnie konkretnego przykładu:

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

Chcę mieć listę długo wektory inicjujące w pętli for. Następne kroki to l [[1]] [2] <- X, ... a następnie l [[2]] [1] <- 1, ... – hora

+0

Wielkie dzięki za edycję. – hora

2

„[” funkcja pozwala wielu zadań bez pętli:

> 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 
Powiązane problemy