Неравномерная последовательность, в которой изменяется наибольшее число

#r #sequence

#r #последовательность

Вопрос:

Я создаю много карт, где меняются разрывы. Я хочу одинаковые интервалы, но наибольшее число изменяется от карты к карте. Я мог бы пойти с несколькими if , но должен быть лучший способ?

 maxvalues <- c(453, 25)
breaks <- c(0,1,2,5,10,20,50,100,200)
  

Из этого я хотел бы получить

 0,1,2,5,10,20,50,100,200, 453
0,1,2,5,10,25
  

Есть идеи?

Ответ №1:

Мы можем перебирать «максимальные значения», получать элементы в «разрывах», которые меньше его, объединять с «x» и unlist

 unlist(lapply(maxvalues,function(x) c(breaks[breaks< x], x)))
#[1]   0   1   2   5  10  20  50 100 200 453   0   1   2   5  10  20  25
  

Комментарии:

1. Большое спасибо, работает как шарм. Все еще пытаюсь разобраться во всех приложениях.

2. @JeppeOlsen As maxvalues — вектор. Используя lapply , он перебирает каждый из элементов в этом векторе в a list , создает логическое выражение ( breaks < x ), подмножество breaks ( breaks[breaks < x] ), объединяет с элементом ( c(breaks[...., x) ) и unlist с вектором.

Ответ №2:

Учитывая, что breaks это отсортировано, я думаю findInterval , что это хорошо подходит для вашей проблемы, поскольку с помощью которой вы можете найти наибольшее число, меньшее, чем заданное вами максимальное значение. Вот как поступить:

 sapply(maxvalues, function(x) c(breaks[1:findInterval(x, breaks)], x))

#[[1]]
# [1]   0   1   2   5  10  20  50 100 200 453

#[[2]]
#[1]  0  1  2  5 10 20 25