Как создать вектор вектора в R

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

-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 

Ответ 1

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

> 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 выводит список, который нам действительно не нужен.

Ответ 2

Предположим, что ваши данные представлены в виде фрейма данных, например, 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

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

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

Ответ 4

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

 dput(dframe) 

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

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

echos c (1,2,3,4)