嵌入功能说明

For*_*bie 3 embed r

阅读 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 
Run Code Online (Sandbox Code Playgroud)

Ron*_*hah 5

x <- 1:10
dimension <- 3
Run Code Online (Sandbox Code Playgroud)

embedembed函数是用R本身编写的,您可以通过在控制台中输入来查看它的源代码。本例代码的主要部分如下

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)
Run Code Online (Sandbox Code Playgroud)

所以n变成10,m就是n - dimension + 1L这里的8。下一行是最重要的一行。x我们使用命令生成子集索引rep.int

1L:m #is
#[1] 1 2 3 4 5 6 7 8
Run Code Online (Sandbox Code Playgroud)

我们重复m,dimension次数,在本例中是

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

dimension:1L #is
#[1] 3 2 1
Run Code Online (Sandbox Code Playgroud)

现在 的每个值都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
Run Code Online (Sandbox Code Playgroud)

我们从这些数字中减去 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
Run Code Online (Sandbox Code Playgroud)

现在将上面的序列添加到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
Run Code Online (Sandbox Code Playgroud)

上面是 的子集值的索引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
Run Code Online (Sandbox Code Playgroud)

最后,所有这些数字被排列成具有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
Run Code Online (Sandbox Code Playgroud)