首页 > 解决方案 > 嵌入功能说明

问题描述

从 stats 包中阅读文档后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 

标签: rembed

解决方案


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,因为在这种情况下,我们的xis 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

推荐阅读