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
解决方案
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
is 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
推荐阅读
- amazon-web-services - AWS S3 下载链接问题
- php - 使包含复杂内容的网站子文件夹仅供会员访问
- ios - 使用 Xcode 11.4 测试 ios 推送通知 - apns 中的链接不起作用
- android-studio - 如何在 android studio for mac 中获取颜色列表?(在 Windows 上按 ctrl q)
- android - 如何通过本机电话簿检索联系人?
- ajax - 使用 AJAX 和 Spring Boot 在网页中显示文件
- google-apps-script - Google Spreadsheet AddOn onInstall / onOpen with AuthMode.NONE:如何识别用户授予的权限?
- r - 如何在网站上发布 R 代码和图表(Markdown)?
- python - 从文件执行 Google Vision API 文本检测时出错
- ios - 从后台返回时不会调用 iOS viewWillAppear,即使在 iOS 13+ 中使用 UIModalPresentationStyle.FullScreen