โหมดคลาสและประเภทของวัตถุ R


39

ฉันสงสัยว่าอะไรคือความแตกต่างระหว่างวัตถุ Mode, Class และ Type of R? ประเภทของวัตถุ R สามารถรับได้โดย typeof () ฟังก์ชั่น, โหมดโดยโหมด () และระดับชั้นโดยคลาส ()

นอกจากนี้ยังมีฟังก์ชั่นและแนวคิดอื่น ๆ ที่คล้ายกันที่ฉันพลาดไปไหม

ขอบคุณและขอแสดงความนับถือ!


2
STR (ตัวแปร) เป็นเพื่อนที่ดีที่สุดของคุณ
Brandon Bertelsen

2
ดูเพิ่มเติมที่R: ประเภทและคลาสของตัวแปรคำถามที่เกี่ยวกับ Stack Overflow
Leo

คำตอบ:


21

class()ใช้เพื่อกำหนด / ระบุสิ่งที่ "พิมพ์" วัตถุจากมุมมองของการเขียนโปรแกรมเชิงวัตถุในอาร์ดังนั้นสำหรับ

> x <- 1:3
> class(x)
[1] "integer"

ฟังก์ชันทั่วไปใด ๆ ที่มีวิธีการ "จำนวนเต็ม" จะถูกนำมาใช้

typeof()ให้ "ประเภท" ของวัตถุจากมุมมองของ R ในขณะที่mode()ให้ "ประเภท" ของวัตถุจากมุมมองของ Becker, Chambers & Wilks (1988) หลังอาจเข้ากันได้มากขึ้นกับการใช้งาน S อื่น ๆ ตามคู่มือนิยามภาษา R

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

สิ่งนี้ถูกกล่าวถึงอย่างเป็นประโยชน์ในนิยามภาษา R ที่เชื่อมโยงกับข้างบน


3
ทำไมมีมุมมองมากมาย ฉันไม่เห็นประโยชน์ใดนอกจากความสับสน
smwikipedia

1
@smwikipedia เนื่องจาก R มีมรดกที่มี S-Plus และ S และภาษาที่พัฒนาขึ้นตามกาลเวลา นอกจากนี้ยังมีความจำเป็นที่จะต้องแยกความแตกต่างระหว่างวัตถุที่ผู้ใช้สามารถสร้างและชนิดของวัตถุฐาน
Reinstate Monica - G. Simpson

@smwikipedia เพราะนั่นเป็นเพียงวิธี R ด้วยเหตุผลเดียวกันกับที่เรามี<-และ=สำหรับการมอบหมายตัวแปร
Andre Terra

9

จาก: https://www.mail-archive.com/r-help@r-project.org/msg17169.html :

'mode' เป็นการจำแนกวัตถุที่ไม่เหมือนกันตามโครงสร้างพื้นฐาน โหมด 'atomic' นั้นเป็นตัวเลข, ซับซ้อน, ตัวอักษรและตรรกะ วัตถุที่เรียกซ้ำมีโหมดเช่น 'รายการ' หรือ 'ฟังก์ชั่น' หรืออื่น ๆ วัตถุมีหนึ่งและโหมดเดียวเท่านั้น

'class' เป็นคุณสมบัติที่กำหนดให้กับวัตถุที่กำหนดว่าฟังก์ชั่นทั่วไปทำงานกับมันอย่างไร มันไม่ได้จัดหมวดหมู่พิเศษร่วมกัน หากวัตถุไม่มีคลาสเฉพาะที่กำหนดให้กับมันเช่นเวกเตอร์ตัวเลขแบบง่ายคลาสของมันมักจะเหมือนกับโหมดของมันโดยการประชุม

การเปลี่ยนโหมดของวัตถุมักถูกเรียกว่า 'บีบบังคับ' โหมดของวัตถุสามารถเปลี่ยนแปลงได้โดยไม่จำเป็นต้องเปลี่ยนคลาส


1

ความแตกต่างหลักระหว่าง class และ typeof คือผู้ใช้สามารถกำหนดได้ แต่ผู้ใช้ไม่สามารถกำหนดได้ ตัวอย่างเช่นกำหนดรายการ

> x<-list("a",c(1,2))

> # x is a list
> class(x)
[1] "list"
> # class can be user defined
> class(x)<-"newclass"
> class(x)
[1] "newclass"

> typeof(x)
[1] "list"
# you cannot assign a different type using typeof()
> typeof(x)<-"newclass"
Error in typeof(x) <- "newclass" : could not find function "typeof<-" 

เพื่อให้ชื่อคลาสที่แน่นอนให้กับวัตถุที่ผู้ใช้กำหนดมีประโยชน์มากในการเขียนโปรแกรม อนุญาตให้แท็กวัตถุที่ผู้ใช้กำหนดในลักษณะคล้ายกับสิ่งที่เกิดขึ้นในภาษาการเขียนโปรแกรมเชิงวัตถุ


ตามRเอกสารประกอบสำหรับtypeofและclassการยืนยันเกี่ยวกับ "ความแตกต่างหลัก" ไม่ถูกต้อง classเป็นคุณลักษณะของวัตถุที่สามารถกำหนดได้โดยไม่คำนึงถึงโหมดที่เก็บข้อมูลภายในขณะที่ "typeof จะกำหนดประเภท (R ภายใน) หรือโหมดที่เก็บข้อมูลของวัตถุใด ๆ " หนึ่งอธิบายลักษณะทางตรรกะในขณะที่อื่น ๆ เป็นลักษณะทางกายภาพของวัตถุ
whuber
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.