2016-08-21 4 views
1

zu machen habe ich eine Liste:Wie man eine Matrix ohne Dimensionsnamen aus einer Liste

direc <- structure(list(no_trades = 3L, sell_trades = 19L, buy_trades = 18L), .Names = c("no_trades", "sell_trades", "buy_trades")) 
# $no_trades 
# [1] 3 
# 
# $sell_trades 
# [1] 19 
# 
# $buy_trades 
# [1] 18 

Ich möchte aus dieser Liste eine Matrix ohne Dimensionsnamen machen. Das wäre zu dieser Matrixstruktur ähneln:

classified <- structure(c(9, 6, 13, 9, 6, 13, 9, 6, 13, 9, 6, 13, 9, 6, 13, 9, 6, 13, 9, 6, 13, 9, 6, 13, 9, 6, 13, 9, 6, 13, 9, 6, 13, 9, 6, 13, 9, 6, 13, 9, 6, 13, 9, 6, 13), .Dim = c(3L, 15L)) 
#  [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15] 
# [1,] 9 9 9 9 9 9 9 9 9  9  9  9  9  9  9 
# [2,] 6 6 6 6 6 6 6 6 6  6  6  6  6  6  6 
# [3,] 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 

ich den folgenden Code versucht haben, von einem anderen SO question für Datenrahmen bedeutete Umwandlung zur Matrix:

m2 <- `dimnames<-`(as.matrix(direc), NULL) 

Aber es gibt mir wieder eine Liste:

Struktur (list (3L, 19L, 18L), DIM = c (3L, 1L))

Vielen Dank im Voraus für die Antwort.

+1

Vielleicht brauchen Sie '" dimnames <- "(do.call (cbind, direc), NULL)' – akrun

+0

@nruss Nein, siehe Code. Es funktioniert nicht für die Liste. Diese Frage wurde von mir in Bezug auf den Datenrahmen gestellt, um weniger Matrix-Konvergenz zu benennen. –

+1

@PolarBear In Ihrem vorherigen Fall war es ein data.frame, jetzt ist es eine 'list' und die Umwandlung in' matrix' kann durch 'cbind' der Elemente der' list' erfolgen und dann tun Sie die 'dimnames' um NULL. Wenn die 'list' Elemente unterschiedlich lang sind, müssen Sie NA anpassen, um die Länge vor dem' cbind' anzupassen. – akrun

Antwort

1

Hier ist die ‚DIREC‘ ist ein list und die Umstellung auf matrix mit as.matrix nicht direkt passieren, aber wir können es mit rbind/cbind zu matrix ändern. Die ursprünglichen direc Elemente sind alle integer Klasse. Wenn wir numeric Klasse haben müssen, braucht es

m1 <- `dimnames<-`(do.call(cbind, lapply(direc, as.numeric)), NULL) 
dput(m1) 
#structure(c(3, 19, 18), .Dim = c(1L, 3L)) 

umgewandelt werden, wenn die list Elemente ungleiche Längen haben, kann es mit NA-Pad besser sein, bevor die cbind

`dimnames<-`(do.call(cbind, lapply(direc, `length<-`, max(lengths(direc)))), NULL) 

tun Um zu verstehen, warum as.matrix hier nicht funktioniert, können wir die methods von list

überprüfen 210

Es hatte nicht die as.matrix Option.

+1

Bitte tun Sie die Notwendigkeit, wenn Sie auch denken, dass diese Frage nicht doppelt ist. –

+0

@PolarBear Es ist nicht als dupe geschlossen, aber ich denke, es ist mit Ihrem früheren Beitrag verwandt, obwohl es keine genaue Betrogene ist. – akrun

+0

Bitte lesen Sie diese verwandte Frage, die beantwortet werden muss. http://stackoverflow.com/questions/39180720/running-functions-that-require-specific-object-class-inside-for-loop Vielen Dank –

Verwandte Themen