ggplot2, aes против aes_string

Sep 13 2020

Поэтому мне нужно заменить aesна aes_stringиз-за сбоя rcmdcheck().

Оригинал:

        aes(
          x = A,
          y = pmax(B, C, na.rm = TRUE),
          ),

Мое замешательство касается Bи C. Могу ли я заключить их в кавычки, поскольку они находятся внутри pmaxфункции? Вот так:

        aes_string(
          x = "A",
          y = pmax("B", "C", na.rm = TRUE),
          ),

Это еще одно решение ?:

        aes(
          x = .data$A, y = pmax(.data$B, .data$C, na.rm = TRUE),
          ),

ИЗМЕНИТЬ:

R CMD Проверьте ошибка в том , что не существует никакого глобального связывания для переменных A, Bи C.

Ответы

Oliver Sep 14 2020 at 06:02

Разница между aesи aes_stringочень проста, aes_stringона интерпретирует строку, описывающую аргументы. Например. следующие работы

library(ggplot2)
data(mtcars)
ggplot(aes_string(x = "log(hp)", y = "1/log(mpg)", col = "factor(cyl)"), data = mtcars) + 
  geom_point() + 
  labs(col = 'cyl')

Это также задокументировано на help(aes_string)странице

aes_ и aes_string требуют, чтобы вы явно цитировали входные данные либо с помощью "" для aes_string (), либо с цитатой или ~ для aes_ ().

Но, как заявил MrFlick в комментариях, все эти функции устарели, что, я считаю, означает, что они сохранены для совместимости, но использование не рекомендуется.