#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
, мы используем!!
вместе с:=
inmutate
/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 и ~ выглядит действительно красиво!