阅读 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)
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)
| 归档时间: |
|
| 查看次数: |
1641 次 |
| 最近记录: |