2013-02-20 19 views
127

widziałem w poradniku na temat regresji modelowania następujące polecenie:Zastosowanie ~ (tyldy) w programowania R Język

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

Co dokładnie robi to polecenie zrobienia, i jaka jest rola ~ (tyldy) w Komenda?

+0

Chcesz udostępnić link do samouczka? Brzmi interesująco. – cheeesus

+1

@cheeesus ... Przeglądałem dane w e-bookach w R ze studiami przypadków ... można tam znaleźć o wiele więcej takich interesujących przykładów. – Ankita

Odpowiedz

145

Rzecz na prawo od <- jest obiektem formula. Jest często używany do oznaczenia modelu statystycznego, gdzie rzecz po lewej stronie ~ jest odpowiedzią, a rzeczy po prawej stronie ~ są zmiennymi objaśniającymi. W języku angielskim powiemy coś w rodzaju: "Gatunek zależy od długości sepii, szerokości sepii, długości płatka i szerokości płatka".

Część tego wiersza przechowuje formułę w obiekcie o nazwie myFormula, dzięki czemu można go używać w innych częściach kodu R.


Inne typowe zastosowania obiektów wzorze w R

Pakiet lattice wykorzystuje je do specify the variables to plot.
Pakiet ggplot2 używa ich do specify panels for plotting.
Pakiet dplyr używa ich do non-standard evaulation.

+0

Aby uzyskać nieco bardziej ekspansywną dyskusję: http://stackoverflow.com/questions/8055508/the-tilde-operator-in-r/8055683#8055683 –

+0

Sekcja "formuły" winiety ['lazyeval'] (https: //cran.r-project.org/web/packages/lazyeval/vignettes/lazyeval.html) daje dobre wprowadzenie do formuły: – RobinL

61

R definiuje operatora(tylda) do użycia w formułach. Wzory mają wszelkiego rodzaju zastosowań, ale chyba najbardziej powszechne jest dla regresji:

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

help("~") lub help("formula") nauczy Cię więcej.

@Spacedman omówił podstawy. Porozmawiajmy o tym, jak to działa.

pierwsze, będąc operatora, trzeba pamiętać, że jest to w istocie skrót do funkcji (z dwoma argumentami):

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

To może być pomocne, aby wiedzieć, na przykład do stosowania w apply Polecenia rodzinne.

Po drugie, można manipulować formułę jako tekst:

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

Po trzecie, można manipulować postaci listy:

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

Wreszcie, istnieje kilka przydatnych sztuczek z formuły (patrz: help("formula"), aby uzyskać więcej informacji):

myFormula <- Species ~ . 

Na przykład powyższa wersja jest taka sama jak wersja oryginalna, ponieważ kropka oznacza "wszystkie zmienne, których jeszcze nie użyto.". Spójrz na data.frame, którego używasz w ewentualnym wywołaniu modelu, widzi, które zmienne istnieją w data.frame, ale nie są wyraźnie wymienione w formule i zastępuje kropkę brakującymi zmiennymi.

+0

Dzięki za odpowiedź @Ari B. Friedman, ale ostatnia linia jest trochę niejednoznaczna gdzie mówisz "kropka oznacza" wszystkie zmienne, których jeszcze nie używasz "". Jeśli mógłbyś to zilustrować dalej. – Ankita

+4

@Ankita, "jeszcze nieużywane" w tym kontekście oznacza nie wymienione. W "Gatunki ~." Gatunek jest jedyną zmienną, która została użyta. Dlatego zależy to od każdej innej zmiennej w data.frame. – voidHead