Как создать субвекторы из вектора?Каждый субвектор состоит из последующих значений из основного вектора - PullRequest
1 голос
/ 15 мая 2019

Я пытаюсь создать субвекторы из основного вектора. Каждый субвектор будет содержать следующее последующее значение в главном векторе.

Я стараюсь избегать петель. x - это ввод, и я хочу выводить как vec_1, vec_2 и т. Д.

x<-c(23,45,32,45,1,67,89,92,101,5,63,42,65)

vec_1 <- c(23,45)

vec_2 <- c(23,45,32)

vec_3 <- c(23,45,32,45)

vec_4 <- c(23,45,32,45,1)

Таким образом я попытался сгенерировать вектор строк с индексами. Я не могу преобразовать строки, скажем, "1:5" в c(1:5).

x<-c(23,45,32,45,1,67,89,92,101,5,63,42,65)

a<-paste("1:",c(5:length(x)),sep="")

x[as.integer(a[1])] ###This does not work

Ответы [ 2 ]

5 голосов
/ 15 мая 2019

Опция, использующая split

idx <- sequence(2:length(x))
split(x[idx], cumsum(idx == 1))
#$`1`
#[1] 23 45

#$`2`
#[1] 23 45 32

#$`3`
#[1] 23 45 32 45

#$`4`
#[1] 23 45 32 45  1

#$`5`
#[1] 23 45 32 45  1 67

# ...
3 голосов
/ 15 мая 2019

Мы можем использовать lapply и подмножество значений x, чтобы создать список векторов.

lapply(seq_along(x), function(p) x[seq_len(p)])

#[[1]]
#[1] 23

#[[2]]
#[1] 23 45

#[[3]]
#[1] 23 45 32

#[[4]]
#[1] 23 45 32 45

#[[5]]
#[1] 23 45 32 45  1
#....

Если вы хотите назвать их, вы можете сделать

a1 <- lapply(seq_along(x), function(p) x[seq_len(p)])
a1 <- setNames(a1, paste0("vec", seq_len(length(x))))

и может получить доступ к каждому из них по имени.

a1[["vec1"]]
#[1] 23
a1[["vec2"]]
#[1] 23 45

Вы можете сделать то же самое с map, а также

purrr::map(seq_along(x), function(p) x[seq_len(p)])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...