ประเภทและคลาสของตัวแปร


85

คำถาม R สองข้อ:

  1. อะไรคือความแตกต่างระหว่างประเภท (ส่งคืนโดยtypeof) และคลาส (ส่งคืนโดยclass) ของตัวแปร? ความแตกต่างคล้ายกับในภาษา C ++ หรือไม่?
  2. ประเภทและคลาสของตัวแปรที่เป็นไปได้คืออะไร?

โพสต์ที่เกี่ยวข้องนี้อาจให้ข้อมูลที่เป็นประโยชน์: stackoverflow.com/questions/8855589/…
Dominic Comtois

คำตอบ:


96

ใน R ทุก "วัตถุ" มีและmode classอดีตแสดงถึงวิธีการจัดเก็บวัตถุในหน่วยความจำ (ตัวเลขอักขระรายการและฟังก์ชัน) ในขณะที่วัตถุในภายหลังแสดงถึงประเภทนามธรรม ตัวอย่างเช่น:

d <- data.frame(V1=c(1,2))
class(d)
# [1] "data.frame"
mode(d)
# [1] "list"
typeof(d)
# list

ดังที่คุณเห็นเฟรมข้อมูลถูกเก็บไว้ในหน่วยความจำlistแต่ถูกรวมไว้ในdata.frameวัตถุ ส่วนหลังอนุญาตให้ใช้ฟังก์ชันของสมาชิกเช่นเดียวกับฟังก์ชันที่มากเกินไปเช่นprintด้วยพฤติกรรมที่กำหนดเอง

typeof( storage.mode) มักจะให้ข้อมูลเหมือนกันmodeแต่ไม่เสมอไป กรณีในประเด็น:

typeof(c(1,2))
# [1] "double"
mode(c(1,2))
# [1] "numeric"

สามารถดูเหตุผลเบื้องหลังสิ่งนี้ได้ที่นี่ :

ฟังก์ชั่นที่เฉพาะเจาะจง R typeofผลตอบแทนประเภทของวัตถุที่ R

โหมดฟังก์ชันให้ข้อมูลเกี่ยวกับโหมดของวัตถุในความหมายของ Becker, Chambers & Wilks (1988) และเข้ากันได้กับการใช้งานอื่น ๆ ของภาษา S

ลิงค์ที่ผมโพสต์ดังกล่าวข้างต้นนอกจากนี้ยังมีรายชื่อของทุกพื้นเมืองอาbasic types(เวกเตอร์รายการอื่น ๆ ) และcompound objects(ปัจจัยและ data.frames) เช่นเดียวกับตัวอย่างบางส่วนของวิธีการmode, typeofและclassที่เกี่ยวข้องสำหรับแต่ละประเภท


1
"ใน R" อ็อบเจ็กต์ "ทุกตัวจะมีโหมดและคลาส" ตราบเท่าที่ดูจากมุมมองโครงสร้างคลาส S4 OOP ใน S3 ออบเจ็กต์อาจไม่ได้กำหนดชื่อคลาส:oldClass(matrix(1:10, 2,5)) # NULL
Erdogan CEVHER

6

typeหมายถึงโครงสร้างข้อมูลต่างๆที่มีอยู่ใน R จริงๆการสนทนานี้ใน คู่มือนิยามภาษา Rอาจช่วยให้คุณเริ่มต้นกับวัตถุและประเภทได้

ในทางกลับกันclassหมายถึงอย่างอื่นใน R มากกว่าที่คุณคาดหวัง จากคู่มือนิยามภาษา R (ที่มาพร้อมกับ R เวอร์ชันของคุณ):

2.2.4 ชั้นเรียน

R มีระบบคลาสที่ซับซ้อน1ซึ่งควบคุมโดยเฉพาะผ่านแอตทริบิวต์คลาส แอ็ตทริบิวต์นี้เป็นเวกเตอร์อักขระที่มีรายการคลาสที่อ็อบเจ็กต์สืบทอดมา ซึ่งเป็นพื้นฐานของฟังก์ชัน "วิธีการทั่วไป" ใน R

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

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