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

В C #:

public static IEnumerable<IEnumerable<T>> Combinations<T>(this IEnumerable<T> elements, int k)
{
  return k == 0 ? new[] { new T[0] } :
    elements.SelectMany((e, i) =>
      elements.Skip(i + 1).Combinations(k - 1).Select(c => (new[] {e}).Concat(c)));
}

Использование:

var result = Combinations(new[] { 1, 2, 3, 4, 5 }, 3);

Результат:

123
124
125
134
135
145
234
235
245
345
16
задан Patrik 2 March 2017 в 16:24
поделиться

4 ответа

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

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

21
ответ дан 30 November 2019 в 12:43
поделиться

Предположим, что ваши данные представлены в виде фрейма данных с именем, скажем, 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
ответ дан 30 November 2019 в 12:43
поделиться

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

lapply(readLines('data.txt'),function(x) as.numeric(strsplit(x,' +')[[1]]))
3
ответ дан 30 November 2019 в 12:43
поделиться

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

 dput(dframe) 

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

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

echos c(1,2,3,4)

2
ответ дан 30 November 2019 в 12:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: