我想用以下内容将一个向量拆分为多个子向量: G条件:
-
每个子向量具有相等的长度
l
,其小于 亲本向量v
的. -
每个子向量在其元素组成中都是唯一的,并包含 连续的元素.
-
特定子向量的元素与 前一子向量和后续子向量.
-
任何子矢量都不能以可被
l
整除的元素的位置开头.例如,如果l=2
没有子向量必须以2, 4, 6, 8, 10, 12, ..., n
开始,l=3
没有子向量必须以3, 6, 9, 12, 15, 18, ..., n
开始,l=3
没有子向量必须以4, 8, 12, 16, 20, 24, ..., n
开始等等. -
输入应该是父向量
v
的向量,并且 块长度l
的整数.而输出应该是一个列表 指向量(不是矩阵),使得每个子向量都作为 向量,所有子向量的列表是一个列表.
下面的代码显示了不应用上面的conditiontion 4
的情况.
v <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) # the parent vector
l <- 3 # constant length of sub-vectors to be
m <- length(v) - l + 1 # number of sub-vector to be
split(t(embed(v, m))[m:1,], 1:m)
$`1`
[1] 1 2 3
$`2`
[1] 2 3 4
$`3`
[1] 3 4 5
$`4`
[1] 4 5 6
$`5`
[1] 5 6 7
$`6`
[1] 6 7 8
$`7`
[1] 7 8 9
$`8`
[1] 8 9 10
我在上面的代码中得到的结果现在将通过手动删除违反上面condition number 4
的子向量来打开.
我知道我的子向量的数量应该是length(ts) - l + 1 - floor((length(ts) - l + 1)/l)
,但当我try 以下代码时:
What I Want个
$`1`
[1] 1 2 3
$`2`
[1] 2 3 4
$`3`
[1] 4 5 6
$`4`
[1] 5 6 7
$`5`
[1] 7 8 9
$`6`
[1] 8 9 10
结果必须满足我的number 4 condition
分和其他所有人的要求.
为便于说明,假设一个父向量为x1
到x10
,其子向量大小为其父向量的l = 3
个连续元素,如下所示:
x1, x2, x3
x2, x3, x4
x4, x5, x6
x5, x6, x7
x7, x8, x9
x8, x9, x10
我所做的是形成一系列的子向量,每个子向量的长度为l =3
,起始元素本质上是渐进的(x1, x2 x4, x5, x7, x8, x10
),并且不是递归的.第三个子向量从x4
开始,而不是从x3
开始,因为从x3
开始将使x3
3成为原始向量的可被l = 3
整除的位置.同样的考虑也适用于第六个和假设的第七个子向量.
How I Need It个
我需要一个R
的代码,给我的输出,我想根据上述条件.您可以使用v <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
作为父向量输入,并在R code
测试中 Select 1 < l < length(v)
.