Подтвердить что ты не робот

R + объединяет список векторов в один вектор

У меня есть один список числового вектора, и я хочу объединить их в один вектор. Но я не могу этого сделать. Этот список может иметь один элемент, общий для элемента списка. Конечный вектор не должен добавлять их дважды. Вот пример:

>lst
`1`
[1] 1 2
`2`
[2] 2 4 5
`3`
[3] 5 9 1

Я хочу конечный результат, как этот

>result
[1] 1 2 4 5 9 1

Я попытался сделать следующее, не беспокоясь о повторении:

>vec<-vector()
>sapply(lst, append,vec)

и

>vec<-vector()
>sapply(lst, c, vec)

Ни один из них не работал. Может кто-нибудь помочь мне в этом?

Спасибо.

4b9b3361

Ответ 1

Решение, которое быстрее, чем предлагаемое выше:

vec<-unlist(lst)
vec[which(c(1,diff(vec)) != 0)]

Это быстрее, чем предложенное выше.

Ответ 2

Другой ответ, используя Reduce().

Создайте список векторов:

lst <- list(c(1,2),c(2,4,5),c(5,9,1))

Объедините их в один вектор

vec <- Reduce(c,lst)
vec
# [1] 1 2 2 4 5 5 9 1

Сохраняйте повторяющиеся только один раз:

unique(Reduce(c,lst))
#[1] 1 2 4 5 9

Если вы хотите сохранить повторяющийся в конце, вы можете использовать vec[which(c(1,diff(vec)) != 0)], как в ответе @Rachid

Ответ 3

Вы хотите rle:

rle(unlist(lst))$values

> lst <- list(`1`=1:2, `2`=c(2,4,5), `3`=c(5,9,1))
> rle(unlist(lst))$values
## 11 21 22 31 32 33 
##  1  2  4  5  9  1 

Ответ 4

будет делать это тоже красиво и выглядит более кратким:

stack(lst)$values