2016-12-08 2 views
0

Скажем, у меня есть список в R:Переупорядочить список R по нетрадиционно упорядоченному вектору?

MyList <- list(A = rnorm(5), B = seq(10), C = letters) 

Теперь, скажем, у меня есть вектор, соответствующие имена из MyList, но имеет их в другой последовательности:

pattern <- c("B", "A", "C") 

Как я могу сортировать MyList в соответствии с заказом в pattern? Результат должен выглядеть так, но с исходными именами, которые все еще назначены.

NewList <- list(MyList[["B"]], MyList[["A"]], MyList[["C"]]) 

Это кажется простым, если pattern имеет естественный порядок (например, по возрастанию или убыванию). Но что, если этого не произойдет, поэтому я не могу использовать sort или order?

Моего идеальное решение будет использовать только базовый R.

+0

Вы ищете для этого 'sapply (шаблон, функция (х) MyList [[х]])'. –

+3

Просто используйте подмножество имен: 'MyList [pattern]' или 'MyList.reordered <- MyList [pattern]' для назначения. – lmo

+0

@imo Thats way better. –

ответ

0

Это может помочь взглянуть на ?"[". В частности, разница между [[ и [ путала меня некоторое время. Здесь важно отметить, что вы можете использовать [ для подмножества для нескольких элементов, а [[ может использоваться только для одного элемента.

Так как @lmo указывает, что вы хотите сделать, это MyList[pattern]. В случае, если вы этого не понимаете, это может работать, потому что names(MyList) соответствует элементам в pattern. Вы можете индексировать/подмножество не только с помощью числового индекса (например, 1:3), но и по имени (например, c("A","B","C")).

TLDR:

NewList <- MyList[pattern] 
Смежные вопросы