У меня есть определяемая пользователем функция, которая вычисляет ежедневные случаи covid для данной страны и выдает фрейм данных:
fn_daily_cases <- function(Country_Name = India)
{
Country_Name <- rlang::quo_name(rlang::enquo(Country_Name))
# above line will insert quote to the value in variable Country_Name
df_gather %>% filter(Country.Region == Country_Name) %>%
mutate(daily_cases = abs(Cases_Count - lag(Cases_Count, default = 0))) %>%
# at beginning it will give 0 instead of NA
arrange(desc(Date))
}
fn_daily_cases(Spain)
####### output ########
Country.Region Date Cases_Count daily_cases
<chr> <date> <int> <dbl>
Spain 2020-12-11 1730575 10519
Spain 2020-12-10 1720056 7955
Spain 2020-12-09 1712101 9773
Spain 2020-12-08 1702328 0
Spain 2020-12-07 1702328 17681
Spain 2020-12-06 1684647 0
Spain 2020-12-05 1684647 0
Spain 2020-12-04 1684647 8745
Spain 2020-12-03 1675902 10127
Spain 2020-12-02 1665775 9331
Проблема: когда я пытаюсь построить этот фрейм данных с помощью другой функции, я не могу отобразить max( Cases_Count)
в подзаголовке
library(glue)
library(tidyverse)
fn_daily_cases_plot <- function(country_selected = India) {
fn_daily_cases({{country_selected}}) %>%
ggplot(aes(Date, y = daily_cases)) +
geom_line(col = "midnightblue") +
labs(title = glue("{quo_name(enquo(country_selected))} Daily Cases") ,
subtitle = glue("Total cases so far: {max(Cases_Count)}" )
) +
theme_light()
}
fn_daily_cases_plot(Spain)
##### output ######
Error in eval(parse(text = text, keep.source = FALSE), envir) : object 'Cases_Count' not found
Попробуйте сначала сохранить данные в отдельный tibble
x
а потом звонить
max(x$Cases_Count)
.
fn_daily_cases_plot <- function(country_selected = India) {
x <- fn_daily_cases({{country_selected}})
ggplot(x, aes(Date, y = daily_cases)) +
geom_line(col = "midnightblue") +
labs(title = glue("{quo_name(enquo(country_selected))} Daily Cases") ,
subtitle = glue("Total cases so far: {max(x$Cases_Count)}" )) +
theme_light()
}
В любом случае, я не знаю, почему вы предпочитаете glue
базовой альтернативе paste
(см. также этот вопрос).
magrittr
конвейер %>%
интерпретирует правую часть как функцию и оценивает в левой части. В вашей версии кода вы используете только один канал: слева у вас есть фрейм данных, а справа у вас есть вызов функции ggplot. Таким образом, R рисует график на основе информации в фрейме данных. Если вы хотите разместить левый в другом месте вызова правого, я рекомендую прочитать сайт справки (см. ?%>%
).
спасибо @Cettt, я не понимаю, почему это работает, назначая его x и затем
max(x$Cases_Count)
, но это не работает сmax(.$Cases_Count)
. Часто я не понимаю, как работает трубопровод Rtidyverse
. Во многих случаях.$variable
работает, но иногда нет, поэтому для меня это остается пробным методом. Я новичок в R, и некоторые люди ранее показывали пример с клеем () в некоторых других вопросах, поэтому я начал использовать клей () вместо sprintf.