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 возвращает имя индекса

Другие вопросы по тегам