Невозможно использовать переменную y в aes_string

В настоящее время я работаю с данными о COVID-19 из Перу и хочу использовать Rmisc::multiplot, чтобы показать развитие положительных случаев в каждом регионе страны. Итак, я пытаюсь закодировать цикл для создания 25 графиков. Только в качестве примера я использую только 4 переменные:

     Fecha    Lima     La Libertad  Madre de Dios
1 2020-04-24   10           2             1
2 2020-04-25   15           4             3
3 2020-04-26   20           8             3

Я сгенерировал вектор с названиями регионов:

nombre_regiones <- c("Lima", "La Libertad", "Madre de Dios")

И я создал пустой список для хранения 25 графиков:

regiones <- list()

Затем я использовал этот цикл for для создания и сохранения каждого графика в списке «регионы»:

for (w in seq_along(nombre_regiones)) { 
  nombre <- paste("r", w, sep = "")
  assign(nombre, ggplot(data = df, aes_string(x = "Fecha", y = nombre_regiones[w])) + geom_line() + geom_point() + scale_x_date(date_labels = "%d, %m", date_breaks  ="1 day") + geom_text(aes_string(label = nombre_regiones[w])))
  regiones[[w]] <- nombre
}

Цикл создал r1 и сохранил график внутри, но когда w = 2 это означает nombre_regiones[w] = "La Libertad", я получил следующее предупреждение:

Error in parse(text = x) : <text>:1:4: unexpected symbol
1: La Libertad
       ^

Из-за этого я не могу создать второй сюжет, и то же самое происходит с третьим регионом "Madre de Dios". Я пробовал разные вещи и искал похожие случаи, но мне не повезло. Также regiones[[w]] <- nombre не работает, но это я посмотрю позже. Заранее спасибо.


person Ernesto Riveros Barrientos    schedule 27.04.2020    source источник
comment
Фрейм данных с переменными Fecha, Lima, La Libertad и Madre de Dios хранится с именем объекта df.   -  person Ernesto Riveros Barrientos    schedule 27.04.2020
comment
Пожалуйста, проверьте мое решение ниже. Работает с изменениями.   -  person akrun    schedule 27.04.2020
comment
@akruni получил это в консоли Error: Invalid input: date_trans works with objects of class Date only, когда я пытаюсь вызвать r1, r2 или r3.   -  person Ernesto Riveros Barrientos    schedule 27.04.2020
comment
вам, вероятно, нужно сначала запустить df$Fecha <- as.Date(df$Fecha).   -  person Ronak Shah    schedule 27.04.2020
comment
@ErnestoRiverosBarrientos, если вы проверите мои данные, Fecha - это класс Date.   -  person akrun    schedule 27.04.2020
comment
Проблема в том, что я использую этот df$Fecha <- as.Date(df$Fecha, origin = "1899-12-30") для подготовки своих данных, и когда я стираю параметр origin, я получаю Error in as.Date.numeric(df$Fecha) : 'origin' must be supplied. Так что я думаю, что проблема там.   -  person Ernesto Riveros Barrientos    schedule 27.04.2020


Ответы (1)


Лучше инициировать list полной длиной

regiones <- vector('list', length(nombre_regiones))

Кроме того, aes_string теперь устарело. Вместо этого можно преобразовать в symbol и оценить (!!)

library(ggplot2)
for (w in seq_along(nombre_regiones)) { 
      nombre <- paste0("r", w)
      assign(nombre, ggplot(data = df,
          aes(x = Fecha, y = !! rlang::sym(nombre_regiones[w]))) +   
              geom_line() + 
              geom_point() + 
              scale_x_date(date_labels = "%d, %m", date_breaks  ="1 day") +
              geom_text(aes(label = !! rlang::sym(nombre_regiones[w]))))
      regiones[[w]] <- nombre
 }

-выход r2

введите здесь описание изображения

-выход r3

введите здесь описание изображения

данные

df <- structure(list(Fecha = structure(c(18376, 18377, 18378), class = "Date"), 
    Lima = c(10L, 15L, 20L), `La Libertad` = c(2L, 4L, 8L), `Madre de Dios` = c(1L, 
    3L, 3L)), row.names = c("1", "2", "3"), class = "data.frame")
person akrun    schedule 27.04.2020
comment
Я забыл изменить функцию paste. Получилось так, как я хотел, большое спасибо. - person Ernesto Riveros Barrientos; 28.04.2020