2015-07-27 2 views
2

Я играл с magrittr, и мне очень нравится результирующий код. Он чист и действительно может сэкономить при наборе текста.Переименование со списком с magrittr

Как переименовать элементы списка в magrittr:

В типичной базовой R:

data_lists <- paste0("q",2011:2015) 
data_lists <- lapply(data_lists,get) 
names(data_lists) <- paste0("q",2011:2015) 

В magrittr, я подумал:

data_lists <- 
    paste0("q",2011:2015) %>% 
    lapply(.,get) %>% 
    names(.) %<>% paste0("q",2011:2015) # this is wrong 

... Но нет костей.

+1

Downvote без комментариев , плохой тон. –

+0

Может быть, это хорошая идея сделать вопрос (и ответ) более общим? Ваш пример может быть проигнорирован, если вы используете 'setNames', как предлагается ниже, но другие типы имен (например, имена розеток) и даже другие псевдонимы не могут (если вы не следуете рекомендациям HongOoi, хотя это выглядит не так хорошо). – Molx

ответ

6

Magrittr использует ряд псевдонимов для решения подобных задач. Ниже приведен пример последовательности, используя псевдоним set_names()

data_lists <- 
    paste0("q",2011:2015) %>% 
    lapply(.,get) %>% 
    set_names(paste0("q",2011:2015)) 

См ?extract для более псевдонимами

+1

Хороший лорд, был 'setNames' недостаточно хорош для magrittr? тот же пакет, который использует 'is_weakly_greater_than' и' is_weakly_less_than', а не '> =/is_ge' или' <=/is_le' – rawr

+0

Я не понимаю, что вы имеете в виду. –

+1

Дело в том, что база R уже имеет 'setNames'; кроме предположения, что змея для верблюжьей сумки, зачем беспокоиться о создании новой функции? –

3

Поскольку все в R является функцией (в основном), вы также можете сделать

data_lists <- 
    paste0("q",2011:2015) %>% 
    lapply(.,get) %>% 
    `names<-`(paste0("q",2011:2015))