Всегда выбираем средний элемент вектора

#r #vector #subset

Вопрос:

Мне было интересно, как всегда выбирать средний элемент в числовом векторе, который отсортирован от наименьшего к наибольшему?

Если число элементов четное, то требуется меньший элемент из двух средних элементов. Вот пример с желаемым результатом.

 g1 = c(8,12,16,24)
g2 = c(8,12,16,24,32)
g3 = c(8,12)
g4 = 8

# Desired Output:
g1 = 12; g2 = 16, g3 = 8, g4 = 8
 

Ответ №1:

Попробуйте с ceiling length помощью деления на 2

 f1 <- function(vec) vec[ceiling(length(vec)/2)]
 

-тестирование

 > f1(g1)
[1] 12
> f1(g2)
[1] 16
> f1(g3)
[1] 8
> f1(g4)
[1] 8
 

Ответ №2:

Вот как они это делают stats:::mean.default , добавляя 1L length и используя по модулю 2 для подмножества.

 f2 <- function(x) x[(length(x)   1L) %/% 2L]
f2(g1)
# [1] 12
f2(g2)
# [1] 16
f2(g3)
# [1] 8
f2(g4)
# [1] 8