Ich verwende das Matrix
Paket von R
. Ich habe einen sparsevectorIndex ein Vektor von einem SparseVector
index.map <- sparseVector(x=1:3, i=c(10, 33, 50), length=50)
und einige Werte zu sehen (einen gewöhnlichen Vektor)
values <- runif(3)
Nun wünsche ich Elemente von values
durch index.map
gehen zu extrahieren z.B.
values[index.map[33]] # should return values[2]
Ich erhalte den Fehler
Error in values[index.map[33]] : invalid subscript type 'S4'
vermutlich, weil R nicht weiß, wie die numerische values
durch eine sparseVector
der Teilmenge. Ich kann index.map
auf eine ganze Zahl zwingen die Lookup zu tun:
values[as(index.map[33], 'integer')] == values[2] # TRUE
aber das ist ziemlich ausführliche für eine solche einfache Bedienung, und ich habe den Zwang zu tun, jedes Mal wenn ich index.map
verwenden - ich bin nicht sicher, wie effizient das ist.
Gibt es eine andere Möglichkeit, diese Indizierung durchzuführen? oder ist das die einzige option?
Ich dachte, vielleicht values
zu einem sparsevector Umwandlung könnte helfen, wie vielleicht das Matrix-Paket würde wissen, wie eine sparsevector von einem anderen sparsevector der Teilmenge, aber es funktioniert nicht:
as(values, 'sparseVector')[index.map[33]]
# Error in as(values, "sparseVector")[index.map[33]] :
# object of type 'S4' is not subsettable
Update@x
(danke @AleksandrVoitov!) Scheint nicht die ganze Zeit zu arbeiten. Zum Beispiel
values[index.map[c(10, 10, 33)]@x]
kehrt values[c(1, 2, 1)]
statt values[c(1, 1, 2)]
, während as(.., 'integer')
auf index.map[c(10, 10, 33)]
Arbeiten mit wie erwartet. Vielleicht ist @x
nicht eine "öffentliche" Möglichkeit, mit einem SparseVector zu interagieren?
Ahhhh, ausgezeichnet! Vielen Dank. Obwohl ich R schon seit vielen Jahren benutze, verstehe ich S4 immer noch nicht richtig ... –
Wahr. Der S4 ist im täglichen Leben etwas ungewöhnlich. –
Hoppla, halt mal. Lösung funktioniert nicht immer. 'values [index.map [c (10, 10, 33)] @ x]' gibt 'Werte [c (1, 2, 1)]' zurück anstatt 'Werte [c (1, 1, 2)]' ' . 'Werte [as (index.map [c (10, 10, 33)], 'Ganzzahl')]' funktioniert wie erwartet. Wird "@ x" offiziell unterstützt? –