Как создать вектор вектора в R - PullRequest
16 голосов
/ 05 июля 2010

У меня есть входные данные, которые содержат такие строки:

-0.438185 -0.766791  0.695282
0.759100  0.034400  0.524807

Как мне создать структуру данных в R, которая выглядит следующим образом:

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

Ответы [ 4 ]

20 голосов
/ 05 июля 2010

Используйте список:

> 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

Думайте о нем как о карте / словаре / ассоциативном массиве, который индексируется целым числом.

И если вы хотите взять строку, подобнуювыше и превратить его в список векторов:

> 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

Я использую strsplit для разделения на новые строки, затем снова применяю strsplit к каждой строке.As.numeric предназначен для преобразования строк в числа, а [[1]] здесь, потому что strsplit выводит список, который нам не нужен.

3 голосов
/ 05 июля 2010

Если он читается из файла, скажем, data.txt, это можно сделать следующим образом:

lapply(readLines('data.txt'),function(x) as.numeric(strsplit(x,' +')[[1]]))
3 голосов
/ 05 июля 2010

Предположим, ваши данные в форме фрейма данных с именем, скажем, 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 
2 голосов
/ 05 июля 2010

StompChicken прав, просто сделайте это со списком. Хотя я хотел бы добавить небольшую хитрость, которая может помочь вам извлечь уроки из существующих структур:

 dput(dframe) 

выводит некоторый код для создания соответствующего data.frame или вектора. Попробуйте это с любым вектором, рамкой или списком, и вы увидите, как он был создан, например ::1004

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

echos c (1,2,3,4)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...