【问题标题】:How to find all linear subsequence with R如何用R找到所有线性子序列
【发布时间】:2017-05-01 16:30:26
【问题描述】:

我正在寻找一个 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)

不幸的是,我不知道从哪里开始。因此,任何帮助将不胜感激。非常感谢!

【问题讨论】:

    标签: r algorithm subsequence


    【解决方案1】:

    假设:

    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
    

    【讨论】:

    • 你是个炸弹。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-03
    相关资源
    最近更新 更多