r语言 - 嵌入函数说明



从统计包中阅读了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 
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。下一行是最重要的行。我们使用rep.int命令生成子集x索引。

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

我们重复mdimension次,在这种情况下是

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的子集值的索引,因为在这种情况下,我们的x1: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

最新更新