2014-02-03 3 views

ответ

1

Использовать cbind вместо c. Не для больших образцов ...

x <- cbind(a, b, c) 
colnames(x)[which.min(x)] 
# [1] "c" 

Это ужасно неэффективно, но это не избавит вас от необходимости определять имена. Кроме того, не будет работать, если ваши векторы имеют более одного значения.

3
x <- c(a=0.01, b=0.1, c=0.0001) 
names(x)[which.min(x)] 
+0

Есть ли другой способ, поскольку я не могу составить список, потому что слишком длинный, это пример – Barnaby

+2

Я не понимаю. В вашем вопросе вы сказали, что у вас есть вектор. Если у вашего вектора есть имена, то приведенный выше код дает вам имя элемента с наименьшим значением. Разве это не то, что вы хотели? Вы имеете в виду, что у вас есть переменные и что вы хотите, чтобы имя переменной имело наименьшее значение? Пример, который точно соответствует вашей ситуации, будет полезен. – ALiX

0

Вы можете создать вектор с именами переменных:

x <- c("a", "b", "c") 

names(which.min(mget(x))) 
# [1] "c" 
1

Хорошо, я думаю, что Барнаби хочет сделать это для объектов в окружающей среде:

a <- 0.01 
b <- 0.1 
c <- 0.0001 

names(which.min(sapply(ls(), get, envir=globalenv()))) 
# [1] "c" 

Примечание это будет захватывать каждый объект в среда, поэтому, если вы не хотите, чтобы вам либо нужно было очистить окружающую среду, либо использовать аргумент pattern для ls.

Действительно, если вы прибегаете к подобным трюкам, вы, вероятно, неправильно делаете свой анализ. Подобные объекты обычно должны храниться вместе (например, в списках).

Смежные вопросы