#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