R: Сортировка векторов по среднему значению в порядке убывания при печати имен векторов
Это очень простой вопрос. Для выполнения задания мне нужно сравнить объемы двух разливочных машин. По сути, я хочу знать, какая из двух машин заполняет больший объем, поэтому я сравниваю два средства на основе 10 наблюдений для каждой машины.
machine1 <- c(151.2,150.5,149.2,147.5,152.9,152.0,151.3,149.7,149.4,150.7)
machine2 <- c(151.9,151.4,150.3,151.2,151.0,150.2,151.2,151.4,150.4,151.7)
means <- c(mean(machine1), mean(machine2))
sort(means, decreasing=T) [1]
Как и следовало ожидать, на выходе это самое большое среднее векторное значение, которое оказывается средним machine2
:
[1] 151.07
Я хотел бы, чтобы на выходе было имя вектора (т.е. machine2
). Если у меня есть большое количество векторов, я хочу просто знать имя вектора с наибольшим средним значением, без необходимости печатать каждое векторное значение отдельно и сравнивать их самостоятельно. Я пытался использовать names()
команда, но не могу понять, как интегрировать это здесь.
1 ответ
Мы можем получить объекты в list
а затем использовать which.max
names(which.max(sapply(mget(ls(pattern = 'machine\\d+')), mean)))
#[1] "machine2"
ls
возвращает все объекты в глобальной среде в виде строки с pattern
то есть "машина", за которой следуют одна или несколько цифр (\\d+
), mget
получает значение объектов в list
, цикл через list
с sapply
, получить mean
как vector
которые также имеют имена в качестве имени объекта. which.max
получает индекс максимального среднего значения и упаковку с names
возвращает имя индекса