Использование ~ (тильда) в R-программировании Язык

В учебнике по регрессионному моделированию я увидел следующую команду:

myFormula <- Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width

Что именно делает эта команда, и какова роль ~ (tilde) в команде?

Ответ 1

Вещь справа от <- представляет собой объект formula. Он часто используется для обозначения статистической модели, где вещью слева от ~ является ответ, а вещи справа от ~ являются объясняющими переменными. Поэтому на английском языке вы бы сказали что-то вроде "Виды зависят от длины спада, ширины сепара, длины лепестка и ширины лепестков".

Часть myFormula <- этой строки хранит формулу в объекте с именем myFormula, поэтому вы можете использовать его в других частях вашего R-кода.


Другие распространенные применения объектов формулы в R

Пакет lattice использует их для указать переменные для построения.
Пакет ggplot2 использует их для указать панели для печати.
Пакет dplyr использует их для нестандартной evaulation.

Ответ 2

R определяет оператор ~ (тильда) для использования в формулах. Формулы имеют все виды использования, но, пожалуй, наиболее распространенным является регрессия:

library(datasets)
lm( myFormula, data=iris)

help("~") или help("formula") научит вас больше.

@Spacedman осветил основы. Давайте обсудим, как это работает.

Сначала, будучи оператором, обратите внимание, что это по существу ярлык функции (с двумя аргументами):

> `~`(lhs,rhs)
lhs ~ rhs
> lhs ~ rhs
lhs ~ rhs

Это может быть полезно знать для использования, например. apply команды семейства.

Во-вторых, вы можете манипулировать формулой как текст:

oldform <- as.character(myFormula) # Get components
myFormula <- as.formula( paste( oldform[2], "Sepal.Length", sep="~" ) )

В-третьих, вы можете манипулировать им как список:

myFormula[[2]]
myFormula[[3]]

Наконец, есть несколько полезных трюков с формулами (подробнее см. help("formula")):

myFormula <- Species ~ . 

Например, вышеприведенная версия аналогична исходной версии, поскольку точка означает "все переменные, которые еще не использовались". Это рассмотрит файл data.frame, который вы используете в своем конечном вызове модели, видит, какие переменные существуют в файле data.frame, но явно не упоминается в вашей формуле и заменяет точку теми отсутствующими переменными.