Ответ 1
Проблема в том, как интерпретируются формулы. В формуле тильда отделяет левую сторону от правой стороны. В формулах оператор ^
предназначен для построения взаимодействий, так что x
= x^2
= x^3
, а не ожидаемая математическая мощность. Если вы набрали (x+y)^2
, интерпретатор R произвел бы (для собственного хорошего внутреннего использования), а не математический: x^2 +2xy +y^2
, а скорее символический: x + y +x:y
, где x:y
- это термин взаимодействия.
?formula
Функция I()
действует для преобразования аргумента в "as.is", то есть того, что вы ожидаете. Таким образом, я (x ^ 2) вернет вектор значений, поднятых до второй мощности.
~
следует понимать как "распределяется как" или "зависит от", если смотреть на функции регрессии. Это подразумевает термин ошибки в описаниях моделей, которые обычно обозначаются как "(Intercept)", а контекст функции и аргументы могут также дополнительно определять функцию связи, такую как log() или logit().
В функциях plot() - ting он в основном меняет обычный порядок аргументов ( x, y )
, который обычно выполняет функция графика. Был написан метод plot.formula, так что формулы могли бы использоваться как более "математический" способ общения с R. В функциях graphics::plot.formula
, curve
и "решетки" и "ggplot" он определяет, как многократные факторы или числовые векторы отображаются и "фасет".
Я узнал позже, что ~
на самом деле является примитивной функцией инфикса (или префикса), которая создает R-вызов, доступ к которому возможен с помощью операторов извлечения списка. Все это скрыто от обычного пользователя, но это может быть средство, используемое более продвинутыми авторами функций.
Перегрузка оператора "+" обсуждается в комментариях ниже и также выполняется в пакетах построения: ggplot2 и gridExtra, где они разделяют функции, которые передают результаты объекта, поэтому они действуют и как сквозные и слоистые оператор. Функции агрегации, которые имеют метод формулы, используют "+" как "расположение" и оператор группировки.