Вопрос в том, как интерпретировать формулы.Инфиксные операторы "+", "*", ":" и "^" имеют совершенно другое значение, чем при использовании с числовыми векторами.В формуле тильда отделяет левую сторону от правой.В формулах оператор ^
предназначен для построения взаимодействий таким образом, чтобы 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) вернул бы вектор значений, возведенных во вторую степень.
~
следует рассматривать как выражение «распределяется как» или «зависит от» при рассмотрении в регрессиифункции.Это подразумевает термин ошибки в описании модели, который обычно помечается как «(Перехват)», и контекст функции и аргументы могут также дополнительно определять функцию связи, такую как log () или logit ().
Символ «+» в формуле на самом деле не добавляет две переменные, а обычно является неявным запросом для вычисления коэффициента (ов) регрессии для этой переменной в контексте остальных переменных, которые находятся наRHS формулы.Функции регрессии используют `model.matrix, и эта функция распознает наличие формул или векторов символов в формуле и создает матрицу, расширяющую уровни дискретных компонентов формулы.
In plot () -Эта функция в основном инвертирует обычный ( x, y )
порядок аргументов, который обычно принимает функция plot.Был написан метод plot.formula, так что формулы можно использовать как более «математический» способ взаимодействия с R. В функциях graphics::plot.formula
, curve
и lattice и ggplot он определяет, насколько кратнокоэффициенты или числовые векторы отображаются и «огранены».
Позже я узнал, что ~
на самом деле является примитивной функцией с инфиксом (или префиксом), которая создает R-вызов, к которому можно обращаться с помощью операторов извлечения списка.Все это скрыто от обычного пользователя, но это может быть средство, используемое более продвинутыми авторами функций.
Перегрузка оператора "+" обсуждается в комментариях ниже и также выполняется при построении графиков.пакеты: ggplot2 и gridExtra, где он разделяет функции, которые доставляют результаты объекта, поэтому он действует и как сквозной и многоуровневый оператор.Функции агрегирования, которые имеют метод формулы, используют «+» как «расположение» и оператор группировки.