Итак, вот мое лучшее предположение и объяснение.
Когда Хэдли говорит:
Это известное ограничение фасетирования функцией - используемые вами переменные должны присутствовать на каждом слое.
Он означает, что в ggplot, когда вы собираетесь использовать функцию в функции фасетирования, вы должны иметь переменную в каждом geom
. Проблема возникает из-за отсутствия переменной cyl
в hline
geom
.
Важно помнить, что это ограничение, а не идеальное поведение. Кроме того, следствием того, как работает их эффективный код, является то, что при использовании функций для фасетирования переменные должны присутствовать в каждом geom
.
Не вдаваясь в специфику функций ggplot2
, я догадываюсь, что обертывание aes
вокруг аргумента yintercept
делает эстетическое отображение функции geom_hline
. Функция aes
отображает переменные в компоненты графика, а не в статические значения. Это важное различие. Хотя мы все еще устанавливаем yintercept = 3
, тот факт, что мы поместили его в эстетическое отображение, должен как-то ссылаться на то, что cyl
также существует в этом пространстве. То есть он косвенно связывает geom_hline
с cyl
, что означает, что он теперь находится в слое и больше не является ограничением.
Это может быть не совсем удовлетворительный ответ, но без чтения кода ggplot2
, чтобы попытаться выяснить, почему именно возникает такое ограничение, это может быть так же хорошо, как вы получите сейчас. Надеюсь, вам подойдет один из этих обходных путей:)