ความหมายของ“.” (dot) ใน R คืออะไร?


39

ฉันแค่อ่านหนังสือ "R in a Nutshell" และดูเหมือนว่าฉันข้ามส่วนที่ "." เช่นเดียวกับใน "sample.formula" ถูกอธิบาย

> sample.formula <- as.formula(y~x1+x2)

ตัวอย่างวัตถุที่มีสูตรสนามเป็นภาษาอื่นหรือไม่? และถ้าเป็นเช่นนั้นฉันจะรู้ได้อย่างไรว่ามีวัตถุ / ฟังก์ชั่นอื่น ๆ อีกบ้าง (ประกาศประเภท)

แก้ไข: ฉันเพิ่งพบการใช้ "." ที่สับสนอีกครั้ง:

> svm(formula = is_spam~., data = spambase.training)

(จุดระหว่าง ~.,)


จุดที่คุณเห็นด้วย is_spam ~ คำสั่งหมายความว่าไม่มีตัวแปรอธิบาย โดยทั่วไปแล้วกับสูตรของโมเดลคุณจะเห็น y ~ x แต่ถ้าคุณไม่มีตัวแปร x, y ~ บอกว่าจะเดาค่าของ y โดยไม่ใช้ตัวแปรอื่น ๆ นี่เป็นเหมือนกับรุ่นy=β0
Christopher Aden

12
@Christopher ตรงกันข้าม.สูตรในบอกให้ R ใช้ตัวแปรทั้งหมดใน dataframe spambase.training(ยกเว้นis_spam) เป็นตัวทำนาย รูปแบบพอดีกับ y=β0y ~ 1
caracal

ฉันไม่ได้ตรวจสอบแหล่งที่มาก่อน ขอบคุณสำหรับการแก้ไข!
Christopher Aden

@caracal (+1) ว้าวฉันแค่สงสัยว่าจะทำอย่างไร ขอบคุณ!
โทมัสเลวีน

คำตอบ:


30

สามารถใช้จุดได้ในชื่อปกติ มันมีการตีความพิเศษเพิ่มเติมอย่างไรก็ตาม สมมติว่าเรามีวัตถุที่มีคลาสเฉพาะ:

 a <- list(b=1)
 class(a) <- "myclass"

ตอนนี้ประกาศmyfunctionเป็นมาตรฐานทั่วไปด้วยวิธีต่อไปนี้:

 myfunction <- function(x,...) UseMethod("myfunction")

ตอนนี้ประกาศฟังก์ชั่น

 myfunction.myclass <- function(x,...) x$b+1

จากนั้นจุดนั้นมีความหมายพิเศษ สำหรับวัตถุทั้งหมดที่มีการmyclassเรียกคลาส

 myfunction(a)

ฟังก์ชั่นการโทรที่เกิดขึ้นจริงจะmyfunction.myclass:

 > myfunction(a)
  [1] 2

นี้จะใช้กันอย่างแพร่หลายใน R ตัวอย่างส่วนใหญ่ apropriate summaryเป็นฟังก์ชั่น แต่ละคลาสมีsummaryฟังก์ชั่นของตัวเองดังนั้นเมื่อคุณติดตั้งโมเดลบางตัวอย่าง (ซึ่งโดยปกติจะส่งคืนวัตถุที่มีคลาสเฉพาะ) คุณจะต้องเรียกใช้summaryและมันจะเรียกใช้ฟังก์ชันสรุปที่เหมาะสมสำหรับโมเดลเฉพาะนั้น


ฉันแปลกใจมากที่คำตอบนี้ได้รับการยอมรับและได้รับการโหวตมากขึ้นเพราะมันไม่ได้ตอบคำถามเลย! มันหมายถึงจุดไข่ปลา ... (ซึ่งเป็นศัพท์เดียวไม่ใช่ลำดับที่แตกต่างกันสามคน) เป็น "จุด" ในขณะที่คำถามชัดเจนหมายถึงจุด .ที่ใช้ในสูตรและชื่อในวิธีที่แตกต่างกันอย่างสิ้นเชิงตามที่อธิบายไว้อย่างถูกต้องในสมัย ตอบโดย Chase
whuber

3
ฉันไม่ได้อ้างถึงจุดไข่ปลา ฉันพยายามอธิบายว่าจุดนั้นใช้สำหรับการแจกจ่ายวิธี S3 ฟังก์ชั่นทั่วไปมักมีรูปไข่นั่นคือเหตุผลที่ฉันใช้มัน หากพวกเขาถูกลบออกจากรหัสคำตอบจะไม่เปลี่ยนแปลง ฉันสามารถเดาได้ว่าฉันให้คำตอบก่อนการแก้ไขเนื่องจากฉันจะให้คำตอบที่แตกต่างกันในตอนนี้หลังจากอ่านเนื้อหาคำถามอีกครั้ง
mpiktas

1
ขอบคุณสำหรับคำอธิบาย ฉันคิดว่าการปรากฏตัวของ "... " สองครั้งทำให้ฉันเข้าใจผิดว่าคุณกำลังอ้างถึงว่าเป็น "จุด"
whuber

12

ดูที่หน้าความช่วยเหลือ?formulaเกี่ยวกับ.นี่คือบิตที่เกี่ยวข้อง:

มีการตีความพิเศษสองรายการ ในสูตร ปกติหนึ่งอยู่ในบริบทของการโต้แย้งข้อมูลของฟังก์ชั่นการปรับตัวแบบและหมายถึง 'คอลัมน์ทั้งหมดไม่ได้อยู่ในสูตร': ดู term.formula ในบริบทของ update.formula เท่านั้นมันหมายถึง 'สิ่งที่ก่อนหน้านี้ในส่วนนี้ของสูตร'

อีกทางเลือกหนึ่งreshapeและreshape2แพ็คเกจใช้.และ...แตกต่างกันเล็กน้อย (จาก?cast):

มีตัวแปรพิเศษสองสามอย่าง: "... " หมายถึงตัวแปรอื่น ๆ ทั้งหมดที่ไม่ได้ใช้ในสูตรและ "." หมายถึงไม่มีตัวแปร


5

มีข้อยกเว้นบางอย่าง (วิธีการแจกจ่าย S3) แต่โดยทั่วไปจะใช้เพียงแค่ความช่วยเหลือที่อ่านง่ายและไม่มีความหมายพิเศษ


2
ผมจะบอกว่าตรงข้าม - มันมีความหมายพิเศษ (คน S3 ส่งคุณพูดถึง) แต่บางคนตั้งชื่ออนุสัญญาเก่าที่เกิดจากชื่อฟังก์ชั่นที่ไม่ได้ generics S3 .จะมีชื่อที่มี ที่เกี่ยวข้องกับชื่อของฟังก์ชั่น สำหรับชื่อของวัตถุ (ไม่ใช่ฟังก์ชั่น) แล้วใช่ไม่มีความหมายพิเศษ
Reinstate Monica - G. Simpson

ที่จุดเริ่มต้นของชื่อ a .ทำให้วัตถุมองไม่เห็นls()แม้ว่า
caracal

2

จุดในตัวอย่าง formformไม่ได้แยกตัวอย่างจากสูตรนอกเหนือจากการมองเห็น มันเป็นเพียงชื่อตัวแปร ชื่อตัวแปร R สามารถประกอบด้วยตัวอักษรและจุด (.) และขีดล่าง (_) โดยมีข้อยกเว้นหนึ่งข้อ นี่คือกฎที่แท้จริง:

" ชื่อที่ถูกต้องทางไวยากรณ์ประกอบด้วยตัวอักษรตัวเลขและตัวอักษรจุดหรือขีดเส้นใต้และเริ่มต้นด้วยตัวอักษรหรือจุดที่ไม่ได้ตามด้วยตัวเลขชื่อเช่น" .2way "ไม่ถูกต้องและไม่ใช่คำที่สงวนไว้ "

กรณีที่สอง (เช่นกรณีของis_spam ~. ) จะแตกต่างกันและได้อธิบายไว้ข้างต้น

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