Я хочу извлечь возрастающую подпоследовательность вектора, начиная с первого элемента. Например, из этого вектора:
a = c(2, 5, 4, 0, 1, 6, 8, 7)
Извлечь увеличивающуюся подпоследовательность
... Я хотел бы вернуться:
res = c(2, 5, 6, 8)
.
Я думал, что могу использовать петлю, но я хочу этого избежать. Еще одна попытка с sort
:
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.
Благодаря
ОК, это круто, именно то, что я искал, спасибо! – clemlaflemme