2013-02-20 39 views
127

tôi thấy trong một hướng dẫn về hồi quy mô hình hóa các lệnh sau:Sử dụng ~ (dấu ngã) trong ngôn ngữ lập trình R

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

chính xác là gì lệnh này làm, và vai trò của ~ (dấu ngã) trong là những gì lệnh?

+0

Chăm sóc chia sẻ liên kết đến hướng dẫn? Nghe có vẻ thú vị. – cheeesus

+1

@cheeesus ... Tôi đã trải qua quá trình khai thác dữ liệu ebook trong R với các nghiên cứu điển hình ... ở đó bạn có thể tìm thấy nhiều ví dụ thú vị hơn như vậy. – Ankita

Trả lời

145

Điều bên phải của <- là đối tượng formula. Nó thường được sử dụng để biểu thị một mô hình thống kê, ở đó bên trái của ~ là đáp ứng và những thứ ở bên phải của ~ là các biến giải thích. Vì vậy, bằng tiếng Anh, bạn sẽ nói điều gì đó giống như "Các loài phụ thuộc vào Độ dài của Sepal, Chiều rộng Sepal, Chiều dài Cánh hoa và Chiều rộng Cánh hoa".

Phần myFormula <- của dòng đó lưu trữ công thức trong đối tượng được gọi là myFormula để bạn có thể sử dụng nó trong các phần khác của mã R của mình.


sử dụng phổ biến khác của các đối tượng trong công thức R

Gói lattice sử dụng chúng để specify the variables to plot.
Gói ggplot2 sử dụng chúng để specify panels for plotting.
Gói dplyr sử dụng chúng cho non-standard evaulation.

+0

Để có một cuộc thảo luận mở rộng hơn một chút: http://stackoverflow.com/questions/8055508/the-tilde-operator-in-r/8055683#8055683 –

+0

Phần 'công thức' của [họa tiết lười biếng '] (https: //cran.r-project.org/web/packages/lazyeval/vignettes/lazyeval.html) giới thiệu tốt về công thức là gì – RobinL

61

R định nghĩa toán tử ~ (dấu ngã) để sử dụng trong công thức. Công thức có tất cả các loại sử dụng, nhưng có lẽ phổ biến nhất là cho hồi quy:

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

help("~") hoặc help("formula") sẽ dạy cho bạn nhiều hơn nữa.

@Spacedman đã đề cập đến các khái niệm cơ bản. Hãy thảo luận cách nó hoạt động.

Thứ nhất, là một nhà điều hành, lưu ý rằng nó thực chất là một shortcut để một hàm (với hai đối số):

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

Điều đó có thể giúp ích cho biết để sử dụng trong ví dụ apply lệnh gia đình.

Thứ hai, bạn có thể thao tác các công thức dưới dạng văn bản:

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

Thứ ba, bạn có thể vận dụng nó như một danh sách:

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

Cuối cùng, có một số thủ thuật hữu ích với công thức (xem help("formula") để biết thêm):

myFormula <- Species ~ . 

Ví dụ: phiên bản ở trên giống với phiên bản gốc, vì dấu chấm có nghĩa là "tất cả các biến chưa được sử dụng". Điều này xem xét data.frame bạn sử dụng trong cuộc gọi mô hình cuối cùng của bạn, xem các biến nào tồn tại trong data.frame nhưng không được đề cập rõ ràng trong công thức của bạn và thay thế dấu chấm bằng các biến mất tích đó.

+0

Cảm ơn câu trả lời @Ari B. Friedman nhưng dòng cuối cùng hơi mơ hồ một chút bạn nói 'dấu chấm nghĩa là' tất cả các biến chưa được sử dụng "'. Nếu bạn có thể minh họa thêm. – Ankita

+4

@Ankita, "chưa được sử dụng" trong ngữ cảnh này có nghĩa là không được đề cập đến. Trong 'Loài ~ .', loài là biến duy nhất đã được sử dụng. Do đó, nó phụ thuộc vào mọi biến khác trong data.frame. – voidHead

Các vấn đề liên quan