почему я не получаю переименованный столбец в R с определенным заголовком?

#r #title

#r #Название

Вопрос:

Я пытаюсь создать функцию, параметры которой определены в локальной среде, и я надеюсь использовать ее в tibble.

здесь это воспроизводимый пример без создания функции:

 tibble <- structure(list(standardised_existing_cond_rate = 1.44), row.names = c(NA, 
-1L), class = c("tbl_df", "tbl", "data.frame"))
  

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

 comorbidity <- "asthma"
title <- "Standardised"

add_to_title <- comorbidity
add_last_word <- " rate in"
country = "India"
country = country

whole_title <- paste(title, add_to_title, add_last_word, country)

whole_title
  

Но затем, когда я переименовываю имя своего столбца со всем заголовком, мне это не удается.

 table <- tibble %>% rename(whole_title = standardised_existing_cond_rate)

table
  

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

Ответ №1:

Используйте !! with := для оценки whole_title :

 library(dplyr)
tibble %>% rename(!!whole_title := standardised_existing_cond_rate)

#  `Standardised asthma  rate in India`
#                                 <dbl>
#1                                 1.44
  

Также есть более простые способы, не вдаваясь в нестандартную оценку. Например, с setNames

 setNames(tibble, whole_title)
  

Комментарии:

1. Для оценки значения whole_title , а не буквальной работы whole_title , мы используем !! вместе с := in mutate / rename .

Ответ №2:

Мы можем использовать rename_at

 library(dplyr)
tibble %>% 
     rename_at(vars(standardised_existing_cond_rate), ~ whole_title)
  

-вывод

 # A tibble: 1 x 1
#  `Standardised asthma  rate in India`
#                                 <dbl>
#1                                 1.44
  

Или с помощью rename_with

 tibble %>% 
          rename_with(~ whole_title, standardised_existing_cond_rate)
# A tibble: 1 x 1
#  `Standardised asthma  rate in India`
#                                 <dbl>
#1                                 1.44
  

Комментарии:

1. rename_with и ~ выглядит действительно красиво!