Використання ~ (tilde) у мові програмування R


187

У підручнику про регресійне моделювання я побачив наступну команду:

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

Що саме робить ця команда і яка роль ~(tilde) у команді?


Хочете поділитися посиланням на підручник? Звучить цікаво.
сир

1
@cheeesus ... Я проходив обробку даних електронної книги в R за допомогою кейсів ... там ви можете знайти ще багато таких цікавих прикладів.
Анкіта

Відповіді:


193

Справа праворуч <-- це formulaпредмет. Його часто використовують для позначення статистичної моделі, де справа зліва від ~відповіді, а речі праворуч ~- пояснювальні змінні. Тож англійською мовою можна сказати щось на кшталт "Види залежать від довжини пелюсток, ширини пелюсток, довжини пелюсток і ширини пелюсток" .

myFormula <-Частина цього рядка зберігає формулу в об'єкті називається , myFormulaтак що ви можете використовувати його в інших частинах R коду.


Інші поширені використання об'єктів формули в R

latticeПакет використовує їх , щоб задати змінні для побудови графіка . Пакет використовує їх , щоб вказати панелі для креслення . Пакет використовує їх для нестандартних evaulation .
ggplot2
dplyr


1
Для трохи більше експансивного обговорення: stackoverflow.com/questions/8055508/the-tilde-operator-in-r / ...
IRTFM

У розділі «формул» в lazyevalвіньєтці дає гарне введення в те , що формула
RobinL

82

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.fram, який ви використовуєте в своєму кінцевому виклику моделі, бачить, які змінні існують у data.frame, але вони чітко не згадуються у вашій формулі, і замінює крапку тими відсутніми змінними.


Дякуємо за відповідь @Ari B. Friedman, але останній рядок є дещо неоднозначним, де ви говорите "крапка означає" всі змінні ще не використані ". Якщо ви могли б це проілюструвати далі.
Анкіта

9
@Ankita, "ще не використовується" в цьому контексті означає, що не згадується. В Species~., вид - єдина змінна, яка була використана. Отже, це залежить від кожної іншої змінної у data.frame.
x4nd3r

Я не розумію myFormula <- Species ~ . . Коли крапка все-таки буде замінена змінними з data.frame? Чи можете ви навести приклад
srghma
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.