Что такое выразительный и эффективный способ векторизации seq в R - PullRequest
1 голос
/ 04 июля 2019

Мне известно о seq, который используется таким образом:

seq(by=1, to=3, by=1)

приведет вас от c (1) к

c (1,2,3)

Как можно векторизовать это поведение, чтобы перейти от

Ввод:

c(1,1,1)

Выход:

 c(1,1,1,2,2,2,3,3,3)

Ответы [ 2 ]

2 голосов
/ 04 июля 2019

seq не векторизовано. Вы можете использовать один из циклов, чтобы получить то же поведение.

Например, с mapply

x <- c(1,1,1)
c(t(mapply(seq, x, 3)))
#[1] 1 1 1 2 2 2 3 3 3

Если вы хотите, чтобы каждая последовательность шла до length(x), используйте ее вместо жесткого кода 3.


Кроме того, если ваш x всегда будет начинаться с 1, как показано в примере, вы можете использовать rep и sequence

sort(sequence(rep(length(x), length(x))))
#[1] 1 1 1 2 2 2 3 3 3
1 голос
/ 04 июля 2019

Опция rep, и она векторизована.Нет необходимости использовать циклы

rep(seq_along(v1), each = length(v1))
#[1] 1 1 1 2 2 2 3 3 3

Или другой вариант - replicate

c(t(replicate(3, seq(1, 3, 1))))
#[1] 1 1 1 2 2 2 3 3 3

Если мы хотели векторизовать seq, используйте Vectorize

c(t(Vectorize(function(x) seq(x, 3, 1))(v1)))
#[1] 1 1 1 2 2 2 3 3 3

данные

v1 <- c(1, 1, 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...