2017-08-10 1 views
0

warum das? y <- min(dim(x))?Erklärung dieser Funktion, die diag() in R zurückgibt

Ich versuchte diesen Code ohne diese c <- vector() und bekam 25 (c <- x[i,i] war in der Schleife. Using c[i] in der Schleife gab mir einen Fehler).

x <- matrix(1:25, 5,5) 
> diag(x) 
> n <- function(x){ 
    y <- min(dim(x)) 
    c <- vector() 
    for(i in 1:y){ 
     c[i] <- x[i,i] 
    } 
    c 
} 
> n(x) 

Antwort

1

Die y <- min(dim(x)) wird verwendet, um die kleinere Dimension der Matrix zu bestimmen. Unter Verwendung von y wird die Anzahl der Iterationen der for-Schleife so festgelegt, dass sie dieser Dimension der Matrix entspricht. Dann wird [i,i] verwendet, um auf die diagonalen Elemente zuzugreifen.

In Ihrem Beispiel ist die Matrixgröße 5x5, also sind beide Dimensionen gleich. Also, für y 5, Sie Schleife mit i von 1 bis 5. Jetzt, da Sie [i,i] für die Matrix-Indizes verwenden, erhalten Sie [2,2] nach [1,1]. Im Wesentlichen wählt die [i,i] die Elemente, wenn sowohl die Zeilennummer als auch die Spaltennummer den gleichen Wert haben.

Wenn Sie die c <- vector() entfernen, wird c als eine einzelne Variable behandelt, und daher c[i] löst einen Fehler aus. Beachten Sie auch, dass der Wert c immer überschrieben wird und Sie daher beim Verlassen der Schleife den letzten Wert erhalten, der in diesem Fall 25 ist.

+0

Das, was ich aus Ihrer Antwort visualisieren, ist die minimale Dimension zuerst [1,1], dann [2,2], [3,3], [4,4] und [5,5]. Warum ist das nächstkleinere nach [1,1] nicht [1,2]? – zizu

+0

@zizu überprüfen Sie die aktualisierte Antwort. Ich denke, es wird hilfreich sein, wenn Sie untersuchen, wie Matrizen im Allgemeinen funktionieren und [in R] (https://stat.ethz.ch/R-manual/R-devel/library/base/html/matrix. html) – Aramis7d

+0

Wenn ich in seq_along (x) angegeben ist und x [i, i] die diagonalen Elemente der Matrix auswählt, sollte nicht c [i] <-x [i, i] die Diagonale erzeugen? Ich bekomme das: Fehler in x [i, i]: Index außerhalb der Grenzen - ist das, weil die Länge 25 nicht mit der Länge der Diagonalen 5 übereinstimmt? – zizu

Verwandte Themen