Не могу использовать переменную y в aes_string - PullRequest
1 голос
/ 27 апреля 2020

В настоящее время я работаю с данными COVID-19 из Перу и хочу использовать мультиплот Rmis c ::, чтобы показать развитие положительных случаев в каждом регионе страны. Поэтому я пытаюсь написать код al oop для генерации 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()

Затем я использовал это для l oop, чтобы сгенерировать и сохранить каждый график в списке «регионов»:

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
}

The l oop создал 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 не работает, но это то, что я посмотрю позже. Заранее спасибо.

1 Ответ

0 голосов
/ 27 апреля 2020

Лучше начинать list с полной длины

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

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

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

enter image description here

выход r3

enter image description here

data

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")
...