2012-04-11 11 views
2

Ich bin nicht mit R-Code vertraut und ich habe versucht, dieses Problem ohne Erfolg zu lösen. Bitte hilf mir!Vektoren mit analogen Namen kombinieren

Wenn ich diese Art von Vektor

> x1 <- c(5,7,9) 
> x2 <- c(6,3,4) 
.... 
> xn <- c(1,2,3) 

und Ich mag sie kombinieren

Ergebnis < - cbind (x1, x2, ..., xn)

Wie sagt man das x1, x2, ..., xn?

Vielen Dank!

Antwort

0

c(x1, x2, ... xn)

> x1 <- c(5,7,9) 
> 
> x2 <- c(6,3,4) 
> 
> xn <- c(1,2,3) 
> c(x1, x2, xn) 
[1] 5 7 9 6 3 4 1 2 3 
> 
> matrix(c(x1, x2, xn), ncol=3) 
    [,1] [,2] [,3] 
[1,] 5 6 1 
[2,] 7 3 2 
[3,] 9 4 3 
> 
4

Obwohl es möglich ist, dieses Problem zu lösen, ist die wirkliche Lösung wahrscheinlich eine andere Art und Weise zu benutzen, um Ihre Vektoren zu speichern. Wie hast du sie bekommen?

Normalerweise ist es besser, Ihre Vektoren in einer Listenstruktur als separate globale Variablen zu haben, wenn Sie mehr als ein paar haben.

Hier ist eine Art und Weise

x <- list(x1 = c(5,7,9), x2=c(6,3,4), xn=c(1,2,3)) 

x$x2 # the x2 vector 
str(x) # prints an overview of x 

# combine them into a matrix 
do.call(cbind, x) 

Dies ist ein Weg in einer Reihe von Vektoren, die von Dateien in eine Liste zu lesen:

# Read in 10 vectors into x 
x <- lapply(1:10, function(i) scan(paste("myvec",i,".txt", sep="")) 
x[[3]] # the vector in myvec3.txt 
str(x) # prints an overview of x 
5

Sie ls mit dem Muster-Argumente verwenden könnten

x.data <- ls(pattern='^x.?') 

Dies gibt eine Liste von Namen zurück, die mit get und verwendet werden können sapply

sapply(x.data, get) 
# x1 x2 xn 
# [1,] 5 6 1 
# [2,] 7 3 2 
# [3,] 9 4 3 
+2

und deshalb 'do.call (cbind, lapply (x.data, bekommen))', folgende von @ Tommy Antwort ... –

+0

auch beachten Sie, dass Ihr Musterabgleich 'x10' gesetzt wird, bevor' x9 'weil 'ls' alphabetisch sortiert ist. Stattdessen würde ich 'x.data <- einfügen (" x ", seq_len (n) sep =" ")' '. Mein Verständnis der Frage ist, dass das ursprüngliche Plakat bereits weiß, was "n" ist, und nur vermeiden möchte, ein sehr langes "cbind (x1, x2, ..., xn)" einzugeben. – flodel

Verwandte Themen