2016-03-29 14 views
0

Ich habe eine Liste von 40 Datensätzen, die alle die gleichen Spalten haben. Ich möchte die 7. Spalte jedes Datensatzes binden. Ich dachte darüber nach, dies mit einer Matrix mit cbind zu tun. Dies ist mein Code:Fehler bei der Verwendung von Cbind mit einer Matrix

RetRates <- function(q) { 
    q <- matrix(nrow = 766, ncol = length(ListeActions), 
       data = rep(0, 766), byrow = TRUE) 
    s <- 0 
    for (i in 1:length(ListeActions)) { 
     x <- ListeActions[[i]] 
     q[,i] <- cbind(q[,i], x[,9]) ## I need the 9th column 
    } 
    return(q) 
} 

Hedi <- matrix(nrow = 766, ncol = length(ListeActions), 
       data = rep(0, 766), byrow = TRUE) 
Hedi <- RetRates(Hedi) 

ich diese Warnungen erhalten:

Warnmeldungen: 1: In ersetzen (q [i], 1: 766, x [9]): die Anzahl der zu ersetzenden Objekte ist kein Vielfaches der Größe des Ersatzes!

+2

zu bekommen Was ist 'ListeActions'? Ihr Beispiel ist nicht reproduzierbar. Kannst du eins anbieten? Und Sie erhalten die Warnung, weil Sie versuchen, 'q [, i]' durch 'cbind (q [, i], x [, 9])' zu ersetzen, was 2 Elemente ist. Was möchten Sie tun, ist die 7. oder 9. Spalte zu binden? (nicht die gleichen Informationen in Ihrer Frage) – cderv

+0

und 'q' ist in Ihrer Funktion definiert. Sie sollten es herausbekommen, wenn Sie es als Argument betrachten wollen. – cderv

Antwort

1

Lassen Sie uns ein kleineres Beispiel nehmen: cbind die fünfte Spalten jeder dieser drei Matrizen

d1 <- matrix(runif(30), 5, 6) 
d2 <- matrix(rnorm(30), 5, 6) 
d3 <- matrix(rnorm(30), 5, 6) 

Zuerst setzen wir die drei Matrizen in einer Liste

M <- list(d1=d1, d2=d2, d3=d3) 

Dann könnten wir verwenden, wie in Ihrer Frage, ein for Schleife

res1 <- matrix(NA, nrow=5, ncol=length(M)) 
for (i in 1:length(M)) { 
    res1[, i] <- M[[i]][,5] 
} 

Oder wir könnten einige magische R-Funktionen verwenden das Ergebnis in einem etwas obskuren Befehl

res2 <- do.call(cbind, lapply(M, "[",,5))