2010-07-05 1 views
12

Ich habe die Dateneingabe, die Zeilen wie diese enthalten:So erstellen Vektor von Vector In R

-0.438185 -0.766791 0.695282 
0.759100 0.034400 0.524807 

Wie kann ich eine Datenstruktur in R erstellen, die wie folgt aussieht:

[[1]] 
    [1] -0.438185 -0.766791 0.695282 
[[2]] 
    [1] 0.759100 0.034400 0.524807 

Antwort

16

Verwenden eine Liste:

> x <- list() 
> x[[1]] <- c(-0.438185, -0.766791, 0.695282) 
> x[[2]] <- c(-0.759100, 0.034400, 0.524807) 

> x 
[[1]] 
[1] -0.438185 -0.766791 0.695282 

[[2]] 
[1] -0.759100 0.034400 0.524807 

Betrachten Sie es als ein map/dictionary/assoziatives Array, das von einer Ganzzahl indiziert wird.

Und wenn Sie eine Zeichenfolge wie das nehmen wollen oben und drehen Sie sie in eine Liste von Vektoren:

> s <- "-0.438185 -0.766791 0.695282\n0.759100 0.034400 0.524807" 
> x <- lapply(strsplit(s, "\n")[[1]], function(x) {as.numeric(strsplit(x, '\\s+')[[1]])}) 
> x 
[[1]] 
[1] -0.438185 -0.766791 0.695282 

[[2]] 
[1] 0.759100 0.034400 0.524807 

ich strsplit bin mit von Zeilenumbrüchen zu spalten, dann strsplit wieder auf jede Zeile angewendet wird. Die as.numeric ist da, um von Strings in Zahlen zu schreiben und die [[1]] sind da, weil strsplit eine Liste ausgibt, die wir nicht wirklich wollen.

2

StompChicken ist richtig, tun Sie es einfach mit einer Liste. Obwohl Id gerne einen kleinen Trick hinzufügen, die Sie lernen, aus den bestehenden Strukturen helfen könnten:

dput(dframe) 

einige Code gibt den jeweiligen data.frame oder Vektor zu erstellen. Versuchen Sie dies mit dem, was Vektor, Rahmen oder Liste und Sie sehen, wie es ist geschaffen worden, zum Beispiel:

x= c(1,2,3,4) 
dput(x) 

echos c (1,2,3,4)

3

Ihre Daten Gesetzt ist in Form ein Datenrahmen genannt, sagen, df:

library(plyr) 
alply(as.matrix(df),1,"[") 

$`1` 
     V1  V2  V3 
-0.438185 -0.766791 0.695282 

$`2` 
     V1  V2  V3 
0.759100 0.034400 0.524807 
3

gibt Wenn es aus einer Datei gelesen wird, sagen data.txt, es kann so gemacht werden:

lapply(readLines('data.txt'),function(x) as.numeric(strsplit(x,' +')[[1]])) 
+1

Oder einfach 'read.table' verwenden. –

+0

Insbesondere, wenn die Anzahl der Elemente pro Zeile unterschiedlich ist. – mbq