Вставить объяснение функции - PullRequest
0 голосов
/ 22 января 2020

После прочтения документации embed() из пакета статистики я все еще не понимаю вывод. Если бы кто-то мог объяснить пример ниже альтернативным / более простым способом (также порядок столбцов), я был бы признателен. Спасибо!

> x <- 1:10
> embed (x, 3)
     [,1] [,2] [,3]
[1,]    3    2    1
[2,]    4    3    2
[3,]    5    4    3
[4,]    6    5    4
[5,]    7    6    5
[6,]    8    7    6
[7,]    9    8    7
[8,]   10    9    8 

1 Ответ

0 голосов
/ 03 апреля 2020
Функция
x <- 1:10
dimension <- 3

embed написана на самом R, вы можете просмотреть ее исходный код, набрав embed в консоли. Основная часть кода для этого случая следующая

n <- length(x)
m <- n - dimension + 1L
data <- x[1L:m + rep.int(dimension:1L, rep.int(m, dimension)) - 1L]
dim(data) <- c(m, dimension)

, поэтому n становится 10, m равно n - dimension + 1L, что здесь 8. Следующая строка - самая важная. Мы генерируем индексы для подмножества x, используя команду rep.int.

1L:m #is
#[1] 1 2 3 4 5 6 7 8

Мы повторяем m, dimension раз, что в этом случае

rep.int(m, dimension)
#[1] 8 8 8

dimension:1L #is
#[1] 3 2 1

Теперь каждое значение dimension:1L повторяется rep.int(m, dimension) раз, что дает

rep.int(dimension:1L, rep.int(m, dimension))
#[1] 3 3 3 3 3 3 3 3 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1

и мы вычитаем 1 из этих чисел, возвращая

rep.int(dimension:1L, rep.int(m, dimension)) - 1L
#[1] 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0

Теперь приведенная выше последовательность добавляется к 1L:m с использованием техники переработки, поэтому вы получаете

1L:m + rep.int(dimension:1L, rep.int(m, dimension)) - 1L
#[1]  3  4  5  6  7  8  9 10  2  3  4  5  6  7  8  9  1  2  3  4  5  6  7  8

выше указатель на поднабор значений из x, так как в этом случае наш x равен 1:10, он будет возвращать те же значения.

x[1L:m + rep.int(dimension:1L, rep.int(m, dimension)) - 1L]
#[1]  3  4  5  6  7  8  9 10  2  3  4  5  6  7  8  9  1  2  3  4  5  6  7  8

Наконец, все эти числа расположены в виде матрицы с m строками и dimension столбцами.

dim(data) <- c(m, dimension)
data
#     [,1] [,2] [,3]
#[1,]    3    2    1
#[2,]    4    3    2
#[3,]    5    4    3
#[4,]    6    5    4
#[5,]    7    6    5
#[6,]    8    7    6
#[7,]    9    8    7
#[8,]   10    9    8
...