2013-01-15 40 views
5

Ich wollte fragen, warum ich diesen Fehler beim Initialisieren einer Liste von zum Beispiel Vektoren oder einem anderen Typ und wie kann ich es beheben?Fehler in `* tmp *` [[k]]: Index außerhalb der Grenzen in R

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

Dies ist der gesamte Code muss ich in der Tat möchte ich eine Liste von Vektoren wie folgt aus:

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

Sollte ich die ganze Liste im Voraus zu initialisieren, oder gibt es eine andere Möglichkeit für nicht immer dieser Fehler?

Antwort

4

Da l nicht bereits einen Vektor hat, möchten Sie keine Position im ersten Element der Liste angeben. Versuchen:

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

Für das Hinzufügen von zusätzlichen Werten an bestimmten Stellen in diesem neuen Vektor, ist es am besten, den Vektor zu gründen mit der bekannten Länge der Werte eingetragen werden (aus Geschwindigkeitsgründen, warum here). Hier ist ein Beispiel-Schleife:

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

In Bezug auf Ihre spezifischen Beispiel:

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

ich eine Liste der lange haben wollen Vektoren, die in einer for-Schleife initialisiert werden. Also die nächsten Schritte sind l [[1]] [2] <- X, ... und dann l [[2]] [1] <- 1, ... – hora

+0

Vielen Dank für die Bearbeitung. – hora

2

Die „[“ Funktion ermöglicht es, mehrere Aufgaben ohne Schleifen:

> 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 
Verwandte Themen