Как создать вектор вектора в 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)