2013-02-20 1 views
127

Я видел в учебнике о регрессионном моделировании следующей команды:Использования ~ (тильда) в R Языка программирования

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

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

+0

Уход за предоставлением ссылки на учебник? Звучит интересно. – cheeesus

+1

@cheeesus ... Я проходил анализ данных ebook в R с тематическими исследованиями ... там вы можете найти еще много таких интересных примеров. – Ankita

ответ

145

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

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


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

Пакет lattice использует их specify the variables to plot.
Пакет ggplot2 использует их для использования в specify panels for plotting.
Пакет dplyr использует их для non-standard evaulation.

+0

Для немного более экспансивного обсуждения: http://stackoverflow.com/questions/8055508/the-tilde-operator-in-r/8055683#8055683 –

+0

Раздел 'формул' [lazyeval' vignette] (https: //cran.r-project.org/web/packages/lazyeval/vignettes/lazyeval.html) дает хорошее представление о том, что формула – RobinL

61

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, но явно не указаны в вашей формуле и заменяют точку теми отсутствующими переменными.

+0

Спасибо за ответ @Ari B. Friedman, но последняя строка немного неоднозначна, где вы говорите, что «точка означает» все переменные, которые еще не использовались ». Если бы вы могли проиллюстрировать это дальше. – Ankita

+4

@ Анкита, «еще не используется» в этом контексте означает не упоминаемый. В «Видах ~.» Вид - единственная переменная, которая была использована. Следовательно, это зависит от любой другой переменной в data.frame. – voidHead

 Смежные вопросы

  • Нет связанных вопросов^_^