我正在寻找一个R函数或代码,它可以从长度为n的序列给出一个长度为k的所有线性子序列的列表,其中k-线性子序列被定义为X形式的序列(ai + b)a> 0且b> = 0。让我们假设给出了这个序列(序列中数字的位置i在括号中给出):
5(1)3(2)8(3)9(4)2(5)
因此,n = 5并且我对所有3线性子序列(k = 3)感兴趣。因此,我想通过我的R函数获得结果
5(1)3(2)8(3)
3(2)8(3)9(4)
8(3)9(4)2(5)
5(1)8(3)2(5)
不幸的是,我不知道从哪里开始。因此,任何帮助将不胜感激。非常感谢提前!
答案 0 :(得分:4)
假设:
n <- 5
k <- 3
1)然后试试这个:
filter_linear <- function(x) if (sd(diff(x)) == 0) x else NA
na.omit(t(combn(n, k, filter_linear)))
给出(1,2,3),(1,3,5)等输出矩阵的行:
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 1 3 5
[3,] 2 3 4
[4,] 3 4 5
attr(,"na.action")
[1] 2 3 4 6 8 9
attr(,"class")
[1] "omit"
2)变体如下:
is_linear <- function(x) sd(diff(x)) == 0
Filter(is_linear, as.data.frame(combn(n, k)))
在输出data.frame:
的列中给出结果 V1 V5 V7 V10
1 1 1 2 3
2 2 3 3 4
3 3 5 4 5