การใช้ ~ (tilde) ในภาษาโปรแกรม R


187

ฉันเห็นในการสอนเกี่ยวกับการสร้างแบบจำลองการถดถอยคำสั่งต่อไปนี้:

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

คำสั่งนี้ทำอะไรกันแน่และบทบาทของ~(tilde) ในคำสั่งคืออะไร?


สนใจที่จะแชร์ลิงก์ไปยังบทช่วยสอนหรือไม่ ฟังดูน่าสนใจ.
cheesus

1
@cheeesus ... ฉันกำลังทำเหมืองข้อมูล ebook ใน R พร้อมกรณีศึกษา ... คุณสามารถหาตัวอย่างที่น่าสนใจอีกมากมาย
Ankita

คำตอบ:


193

สิ่งที่อยู่ทางขวา<-คือformulaวัตถุ มันมักจะใช้เพื่อแสดงรูปแบบทางสถิติซึ่งสิ่งที่อยู่ทางซ้ายของ~คือการตอบสนองและสิ่งที่อยู่ทางขวาของ~เป็นตัวแปรอธิบาย ดังนั้นในภาษาอังกฤษที่คุณต้องการพูดอะไรเช่น"สปีชี่ขึ้นอยู่กับความยาว Sepal, Sepal ความกว้างความยาวกลีบดอกและกลีบกว้าง"

myFormula <-ส่วนหนึ่งของสายที่เก็บสูตรในวัตถุที่เรียกว่าmyFormulaเพื่อให้คุณสามารถใช้ในส่วนอื่น ๆ ของรหัส R ของคุณ


การใช้งานทั่วไปอื่น ๆ ของวัตถุสูตรใน R

latticeแพคเกจใช้เพื่อระบุตัวแปรพล็อต แพคเกจใช้เพื่อระบุการติดตั้งสำหรับพล็อต แพคเกจใช้พวกเขาสำหรับevaulation ที่ไม่ได้มาตรฐาน
ggplot2
dplyr


1
สำหรับการสนทนาที่กว้างขวางขึ้นเล็กน้อย: stackoverflow.com/questions/8055508/the-tilde-operator-in-r/…
IRTFM

ส่วน 'สูตร' ของlazyevalบทความสั้นจะให้การแนะนำที่ดีเกี่ยวกับสูตรคืออะไร
RobinL

82

R กำหนด~โอเปอเรเตอร์ (tilde) สำหรับใช้ในสูตร สูตรมีการใช้งานทุกประเภท แต่อาจพบได้บ่อยที่สุดสำหรับการถดถอย:

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 แต่ไม่ได้กล่าวถึงอย่างชัดเจนในสูตรของคุณและแทนที่จุดด้วยตัวแปรที่ขาดหายไปเหล่านั้น


ขอบคุณสำหรับคำตอบ @Ari B. Friedman แต่บรรทัดสุดท้ายนั้นค่อนข้างคลุมเครือซึ่งคุณพูดว่า 'dot หมายถึง "ตัวแปรทั้งหมดที่ยังไม่ได้ใช้" หากคุณสามารถอธิบายเพิ่มเติมได้
Ankita

9
@Ankita "ยังไม่ได้ใช้" ในบริบทนี้หมายถึงไม่ได้อ้างถึง ในสปีSpecies~.ชีส์เป็นตัวแปรเดียวที่มีการใช้ ดังนั้นจึงขึ้นอยู่กับตัวแปรอื่น ๆ ทุกตัวใน data.frame
x4nd3r

myFormula <- Species ~ . ฉันไม่เข้าใจ เมื่อจุดยังคงถูกแทนที่ด้วยตัวแปรจาก data.frame? คุณสามารถให้ตัวอย่าง
srghma
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.