Функция, чтобы найти, если значение больше, чем все предыдущие значения в векторе - PullRequest
6 голосов
/ 24 июня 2019

Это должно быть очень просто, но мои знания ограничены.Я пытаюсь выяснить, если какое-либо значение больше, чем все предыдущие значения.Примером может быть

x<-c(1.1, 2.5, 2.4, 3.6, 3.2)

результаты:

NA  True False True False

Мои реальные значения - это измерения с большим количеством десятичных знаков, поэтому я сомневаюсь, что получу одно и то же значение дважды

Ответы [ 3 ]

11 голосов
/ 24 июня 2019

Вы можете использовать cummax(), чтобы получить наибольшее значение.x >= cummax(x) в основном дает вам ответ, хотя элемент 1 равен TRUE, поэтому вам просто нужно изменить это:

> out = x >= cummax(x)
> out[1] = NA
> out
[1]    NA  TRUE FALSE  TRUE FALSE
1 голос
/ 24 июня 2019

Хотя @Marius понял это абсолютно правильно. Вот вариант с петлей

sapply(seq_along(x), function(i) all(x[i] >= x[seq_len(i)]))
#[1]  TRUE  TRUE FALSE  TRUE FALSE

Или та же логика с явным for циклом

out <- logical(length(x))
for(i in seq_along(x)) {
   out[i] <- all(x[i] >= x[seq_len(i)])
}
out[1] <- NA
out
#[1]    NA  TRUE FALSE  TRUE FALSE
0 голосов
/ 24 июня 2019

Мы можем использовать lapply

unlist(lapply(seq_along(x), function(i) all(x[i] >=x[seq(i)])))
#[1]  TRUE  TRUE FALSE  TRUE FALSE

Или с max.col

max.col(t(sapply(x, `>=`, x)), 'last') > seq_along(x)
#[1] FALSE  TRUE FALSE  TRUE FALSE

или с for петля

mx <- x[1]
i1 <- logical(length(x))
for(i in seq_along(x)) {i1[i][x[i] > mx] <- TRUE; mx <- max(c(mx, x[i]))}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...