Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 提取递增子序列_R_Subsequence - Fatal编程技术网

R 提取递增子序列

R 提取递增子序列,r,subsequence,R,Subsequence,我希望从第一个元素开始提取向量的递增子序列。例如,从这个向量: a=c(2,5,4,0,1,6,8,7) …我想返回: res=c(2,5,6,8) 我想我可以使用循环,但我想避免它。另一次尝试使用排序: a = c(2, 5, 4, 0, 1, 6, 8, 7) ind = sort(a, index.return = TRUE)$ix mat = (t(matrix(ind))[rep(1, length(ind)), ] - matrix(ind)[ , rep(1, length(ind

我希望从第一个元素开始提取向量的递增子序列。例如,从这个向量:
a=c(2,5,4,0,1,6,8,7)

…我想返回:
res=c(2,5,6,8)

我想我可以使用循环,但我想避免它。另一次尝试使用
排序

a = c(2, 5, 4, 0, 1, 6, 8, 7)
ind = sort(a, index.return = TRUE)$ix
mat = (t(matrix(ind))[rep(1, length(ind)), ] - matrix(ind)[ , rep(1, length(ind))])
mat = ((mat*upper.tri(mat)) > 0) %*% rep(1, length(ind)) == (c(length(ind):1) - 1)
a[ind][mat]
基本上,我对输入向量进行排序,并检查索引是否验证了条件“右侧没有更低的索引”,这意味着之前没有更大的值

但它似乎有点复杂,我想知道是否有更简单/更快的解决方案,或者在R中有一个预构建的函数


感谢

一种可能是找到向量的累积最大值,然后提取唯一元素:

unique(cummax(a))
# [1] 2 5 6 8

另一个答案更好,但是我做了这个迭代函数,它也可以工作。它通过使所有连续差异大于0来工作

  increasing <- function (input_vec) {
      while(!all(diff(input_vec) > 0)){
          input_vec <- input_vec[c(1,diff(input_vec))>0]
      }
      input_vec
  }
0){
输入向量0]
}
输入向量
}