So erstellen Sie eine matrix von Listen im R?
Was ich haben will ist ein matrix, in dem jeder element ist ein Liste selbst.
Siehe dazu das folgende Beispiel:
1 2 3
1 1,2,4 1,2 1
2 Null 3,4,5,6 1,3
Sah ich diese post, und habe Folgendes versucht, aber bekam eine Fehlermeldung :
b <- array()
b[j, i, ] <- A[i]
wobei A ein Vektor selbst.
Der Fehler war:
Error in b[j, i, ] <- A[i] : incorrect number of subscripts
Wie soll ich das definieren und den Zugriff auf die einzelnen element der matrix, und jedes element des enthaltenen Listen?
Update1 :
b<-matrix(list(),nrow = length(d), ncol =length(c))
Error in b[j, i] <- A[i] : replacement has length zero
Möchte ich angeben, dass jedes element einer Liste und dann versuchen Sie, füllen Sie es mit verschiedenen Liste mit unterschiedlicher Länge von null bis n.
Update2 :
running what @BondedDust commented :
b<-matrix(rep(list(),(c*d)),,nrow = length(d), ncol =length(c))
Erorr in b[[j*nrow(b)+i]] <- A[i] : attempt to select less than one element
Eine :
A[1]<-c(3) F[[1]]<-numeric(0) E[[1]]<-numeric(0)
A[2]<-c(1) F[2]<-c(1) E[2]<-c(1)
A[3]<-c(1) F[3]<-c(2) E[[3]]<-numeric(0)
A[[4]]<-c(1,3) F[[4]]<-numeric(0) E[[4]]<-numeric(0)
A[5]<-c(4) F[5]<-c(4) E[5]<-c(4)
A :Werte von Zeile 1 , F:Zeile 2 und E :Zeile 3. ( 5 Spalte )
diese Daten nicht in dieser form und nicht gespeichert wird, wo jeder,werden Sie die Ausgabe der Funktion (dort ist die Funktion an der Stelle von A[i]
).die Daten zeigen, welche Dosis A
Aussehen mag reproduzierbar und daher zeigt die position in der matrix und gibt zurück die error
im update2.A[4]
ist das element der Spalte 4 Zeile 2.
- nicht
matrix(list(c(1,2,3)))
was er braucht? - Es ist nicht unmöglich, Listen-Elementen in den Matrizen.
- Die Dokumentation für
matrix
nicht sagen, dass nur Atomare Vektoren können angegeben werden, die als Argumente an die parameter. Es sagt nur, dassas.vector
werden die Attribute entfernen. (Die Streifen Termine, POSIXct und Faktor Argumente Ihren Klassen.) Wenn Sie sind nur Listen (die sind nach alle eine andere form des "R Vektoren"), dann gibt es keine Gewalt auf die Daten. - Zum Bearbeiten. Einstellung ein Objekt als ein leeres array ist nicht erlaubt, Sie zu haben dynamische array-Dimensionierung. Das kann eine Funktion von arrays in anderen Sprachen, aber NICHT in R.
- Die Aufgabe, die leichter gewesen wäre, wenn Sie tatsächlich getestet, der code. Siehe mein edit. (Es ist nicht möglich
E[1] <- numeric(0)
. Müssen "[[" und diec()
ist überflüssig. - Außerdem, wie ich bereits erklärt habe, werden die R-Matrizen indexiert werden, in column - major-order. Ich nehme an, Sie können verwenden Sie immer die
t()
Funktion ist, wenn die absolution braucht, um zu sein, wie du Sie beschrieben hast. - für die Prüfung nicht es. Ich erstelle Liste der Liste der Liste meiner selbst für diese Aufgabe, aber ich bevorzuge den vorgegebenen matrix zu vermeiden, erstellen einer Liste durch hinzufügen von Zeilen und eine Allgemeine form , die Daten, die darin enthalten war ein Daten reproduzieren das update2 Fehler.(Ich inbegriffen, weitere Erklärungen und die Fehler zu korrigieren) aber vielen Dank für alle Ihre Hilfe.die gewünschte Antwort wäre Ihr Kommentar(update2) (Definition von Zeilen und Spalten oder in der genaue format, das Sie erklärt), ohne den Fehler.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese baut, die matrix, obwohl die print-Methode nicht in der Art und Weise Sie sich vorstellen können:
Inspizieren das erste element:
Demonstration der Erstellung von "matrix von Listen" aus einer Liste:
Weiter beantragte demonstration:
Fragte man (in den Kommentaren) "....gibt es eine Möglichkeit, definieren Sie die Anzahl der Spalten und Zeilen , aber nicht das element selbst, weil Sie unbekannt sind?"
Beantwortet (zunächst in den Kommentaren)
list("blah", 1)
als ein element in Ihrer Liste, denn dann drucken die matrix direkt die Meldung "Liste" - element.dim<-()
NULL
die leer ist):apply(m, c(1,2), function(x) paste(eval(parse(text=x)), collapse = " "))
. Gibt es einen besseren Ansatz?tapply
wenn der Wert von der Funktion zurückgegeben argument ist eine Liste.b<-matrix(rep(list(), 6),nrow = 2, ncol =3)
.... dann ersetzen Sie die NULL-Elemente mit den Werten. Verwenden müssen," [[":b[[1]] <- c(1,2,3,4)
b<-matrix(rep(list(),(length(d)*length(c))),nrow = length(c), ncol =length(d))
und die versuchenb[j, i] <- A[i]
aber immer noch diese Fehlermeldung erhalten :subscript out of bounds
b[[ j*nrow(b)+i]]
attempt to select less than one element
, bitte siehe update2A
ist (reproduzierbar) gibt es keine Hoffnung für den nützlichen Kommentar.