R Academy · บทเรียน

ภาพรวมระบบชนิดข้อมูลของ R

ทำความเข้าใจชนิด double, integer, character, logical และ complex

บทเรียน 1 จาก 413 ขั้นตอน

ภาพรวมระบบชนิดข้อมูลของ R เป็นบทเรียน R Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน R Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส R Academy มีบทเรียนทั้งหมด 4 บทเรียน

ระบบชนิดข้อมูลของ R

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

# Check class and type of various objects
cat('class(42L)    :', class(42L), '
')
cat('typeof(42L)   :', typeof(42L), '
')
cat('class(3.14)   :', class(3.14), '
')
cat('typeof(3.14)  :', typeof(3.14), '
')
cat('class(TRUE)   :', class(TRUE), '
')
cat('class("hello"):', class('hello'), '
')

class() เทียบกับ typeof()

class(x) คืนค่าหมวดหมู่ระดับสูงที่ระบบเชิงวัตถุของ R ใช้ (เช่น 'integer', 'numeric', 'matrix') ส่วน typeof(x) คืนค่าชนิดการจัดเก็บระดับต่ำของภาษา C (เช่น 'integer', 'double', 'closure')

m <- matrix(1:4, nrow = 2)
cat('class(matrix)  :', class(m), '
')   # matrix array
cat('typeof(matrix) :', typeof(m), '
')  # integer

f <- factor(c('a', 'b', 'a'))
cat('class(factor)  :', class(f), '
')   # factor
cat('typeof(factor) :', typeof(f), '
')  # integer (stored as int!)

cat('class(list)    :', class(list()), '
')  # list
cat('typeof(list)   :', typeof(list()), '
') # list

is.numeric() — การตรวจสอบค่าตัวเลข

is.numeric(x) คืนค่า TRUE ทั้งสำหรับค่า integer และ double (รวมถึงเมทริกซ์ตัวเลข) ฟังก์ชันนี้ตรวจสอบชนิดข้อมูลตัวเลขระดับกว้าง ไม่ใช่โหมดการจัดเก็บที่เฉพาะเจาะจง

cat('is.numeric(3.14):', is.numeric(3.14), '
')    # TRUE (double)
cat('is.numeric(3L):  ', is.numeric(3L), '
')      # TRUE (integer)
cat('is.numeric(TRUE):', is.numeric(TRUE), '
')    # FALSE
cat('is.numeric("3"): ', is.numeric('3'), '
')     # FALSE
cat('is.numeric(NA):  ', is.numeric(NA), '
')      # FALSE (NA is logical)

is.integer() เทียบกับ is.double()

is.integer() ตรวจสอบโดยเฉพาะว่าจัดเก็บเป็นจำนวนเต็ม (สร้างด้วยส่วนต่อท้าย L หรือ as.integer()) ส่วน is.double() ตรวจสอบการจัดเก็บแบบเลขทศนิยม (double) ทั้งสองชนิดเป็นประเภทย่อยของ numeric

x_int <- 5L
x_dbl <- 5.0

cat('--- x_int = 5L ---
')
cat('is.integer:', is.integer(x_int), '
')  # TRUE
cat('is.double: ', is.double(x_int), '
')   # FALSE
cat('is.numeric:', is.numeric(x_int), '
')  # TRUE

cat('--- x_dbl = 5.0 ---
')
cat('is.integer:', is.integer(x_dbl), '
')  # FALSE
cat('is.double: ', is.double(x_dbl), '
')   # TRUE
cat('is.numeric:', is.numeric(x_dbl), '
')  # TRUE

is.character() — การตรวจสอบสตริง

is.character(x) คืนค่า TRUE หาก x เป็นเวกเตอร์อักขระ (สตริง) ใช้ฟังก์ชันนี้ตรวจสอบอินพุตที่ควรเป็นข้อความ หรือแยกความแตกต่างระหว่างชนิด NA แบบตัวเลขกับแบบอักขระ

greetings <- c('hello', 'world', 'R')
numbers <- c(1, 2, 3)
numeric_string <- '42'

cat('is.character(greetings):      ', is.character(greetings), '
')
cat('is.character(numbers):        ', is.character(numbers), '
')
cat('is.character(numeric_string): ', is.character(numeric_string), '
')
cat('is.character(NA_character_):  ', is.character(NA_character_), '
')

is.logical() — การตรวจสอบค่าบูลีน

is.logical(x) คืนค่า TRUE หาก x มีค่าตรรกะ (บูลีน) โปรดทราบว่า NA ที่ไม่ได้ระบุชนิดจะถือเป็นค่าตรรกะโดยค่าเริ่มต้น

flags <- c(TRUE, FALSE, TRUE, NA)
cat('is.logical(flags): ', is.logical(flags), '
')   # TRUE
cat('is.logical(NA):    ', is.logical(NA), '
')      # TRUE (default NA is logical)
cat('is.logical(1):     ', is.logical(1), '
')       # FALSE
cat('is.logical("TRUE"):', is.logical('TRUE'), '
')  # FALSE
cat('typeof(NA):        ', typeof(NA), '
')          # logical

ลำดับชั้นชนิดข้อมูลของ R

ชนิดข้อมูลอะตอมของ R มีลำดับชั้นจากง่ายที่สุดไปซับซ้อนที่สุดดังนี้: logical < integer < double < complex < character เมื่อผสมชนิดข้อมูลในเวกเตอร์ R จะปรับชนิดของสมาชิกทั้งหมดให้เป็นชนิดที่ซับซ้อนที่สุดที่มีอยู่

# Type hierarchy in action
cat('c(TRUE, 1L) type:     ', typeof(c(TRUE, 1L)), '
')   # integer
cat('c(1L, 1.5) type:      ', typeof(c(1L, 1.5)), '
')   # double
cat('c(1.5, 1+0i) type:    ', typeof(c(1.5, 1+0i)), '
') # complex
cat('c(1+0i, "a") type:   ', typeof(c(1+0i, 'a')), '
')  # character
cat('c(TRUE, "x") type:    ', typeof(c(TRUE, 'x')), '
') # character

การตรวจสอบชนิดข้อมูลด้วยโปรแกรม

คุณสามารถเขียนฟังก์ชันตรวจสอบชนิดข้อมูลเพื่อประเมินรายการออบเจ็กต์ได้ การใช้ class(), typeof() และ length() ร่วมกันจะให้สรุปโครงสร้างของออบเจ็กต์ใด ๆ ได้อย่างครอบคลุม

describe_type <- function(x, label) {
  cat(label, ': class =', class(x), ', typeof =', typeof(x),
      ', length =', length(x), '
')
}

describe_type(42L,         'integer literal')
describe_type(3.14,        'double literal')
describe_type(TRUE,        'logical')
describe_type('hello',     'character')
describe_type(c(1,2,3),    'numeric vector')
describe_type(list(1,'a'), 'list')

storage.mode() และ mode()

storage.mode(x) คล้ายกับ typeof(x) แต่ใช้หลักการตั้งชื่อแบบ S3 (เช่น คืนค่า 'double' แทน 'double') ส่วน mode(x) คืนค่าการจัดกลุ่มที่หยาบกว่าเล็กน้อย โดยจัด integer และ double รวมกันเป็น 'numeric'

x_int <- 5L
x_dbl <- 5.0

cat('mode(5L):         ', mode(x_int), '
')          # numeric
cat('mode(5.0):        ', mode(x_dbl), '
')          # numeric
cat('storage.mode(5L): ', storage.mode(x_int), '
')  # integer
cat('storage.mode(5.0):', storage.mode(x_dbl), '
')  # double
# mode() lumps int+dbl; storage.mode() / typeof() distinguish them

การตรวจสอบชนิดข้อมูลสำหรับรายการและดาต้าเฟรม

สำหรับออบเจ็กต์ที่ซับซ้อนขึ้น เช่น รายการและดาต้าเฟรม sapply(df, class) จะใช้ class() กับแต่ละคอลัมน์ ทำให้ได้เวกเตอร์ชนิดคอลัมน์ที่มีชื่อกำกับ ซึ่งเป็นวิธีรวดเร็วในการตรวจสอบโครงสร้างของดาต้าเฟรม

df <- data.frame(
  id      = 1:3,
  name    = c('Alice', 'Bob', 'Carol'),
  score   = c(88.5, 79.0, 92.3),
  passed  = c(TRUE, TRUE, TRUE)
)
cat('Column types:
')
print(sapply(df, class))
cat('Column typeof:
')
print(sapply(df, typeof))

สรุประบบชนิดข้อมูล

ต่อไปนี้คือข้อมูลอ้างอิงอย่างรวดเร็วสำหรับเครื่องมือตรวจสอบชนิดข้อมูลของ R:

  • class(x) — ชื่อคลาส S3 ระดับสูง
  • typeof(x) — ชนิดการจัดเก็บระดับต่ำของภาษา C
  • is.numeric(x) — TRUE สำหรับ integer หรือ double
  • is.integer(x) — TRUE เฉพาะสำหรับการจัดเก็บแบบ integer
  • is.double(x) — TRUE เฉพาะสำหรับ double (เลขทศนิยม)
  • is.character(x) — TRUE สำหรับสตริง
  • is.logical(x) — TRUE สำหรับ TRUE/FALSE/NA
x <- 42L
cat('class(42L):       ', class(x), '
')
cat('typeof(42L):      ', typeof(x), '
')
cat('is.numeric(42L):  ', is.numeric(x), '
')
cat('is.integer(42L):  ', is.integer(x), '
')
cat('is.double(42L):   ', is.double(x), '
')
cat('is.character(42L):', is.character(x), '
')

ตรวจสอบอย่างรวดเร็ว

is.numeric(5L) คืนค่าอะไรใน R

ทบทวน: ระบบชนิดข้อมูลของ R

ทำได้ดีมากครับ/ค่ะ! ประเด็นสำคัญจากบทเรียนนี้มีดังนี้:

  • class(x) คืนค่าชนิดข้อมูลระดับสูง ส่วน typeof(x) คืนค่าชนิดการจัดเก็บระดับต่ำ
  • is.numeric() เป็น TRUE ทั้งสำหรับจำนวนเต็มและ double
  • is.integer() และ is.double() ใช้แยกชนิดย่อยของข้อมูลตัวเลขทั้งสองแบบ
  • ลำดับชั้นชนิดข้อมูลของ R (ต่ำ → สูง): logical → integer → double → complex → character
  • การผสมชนิดข้อมูลในเวกเตอร์จะทำให้ R ปรับชนิดข้อมูลโดยอัตโนมัติเป็นชนิดที่สูงที่สุด
  • sapply(df, class) ใช้ตรวจสอบชนิดข้อมูลของทุกคอลัมน์ในดาต้าเฟรม
# Type audit function
audit_types <- function(x, name = 'x') {
  cat(name, ': class=', class(x), ', typeof=', typeof(x),
      ', is.numeric=', is.numeric(x), '
')
}
audit_types(1L,      'integer')
audit_types(1.0,     'double')
audit_types(TRUE,    'logical')
audit_types('hello', 'character')
audit_types(1+2i,    'complex')
เริ่มต้นได้ฟรี

เรียนรู้ R ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
43
บทเรียน
159

คำถามที่พบบ่อย

บทเรียน “ภาพรวมระบบชนิดข้อมูลของ R” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ภาพรวมระบบชนิดข้อมูลของ R” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส R Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส R Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ภาพรวมระบบชนิดข้อมูลของ R”

ทำความเข้าใจชนิด double, integer, character, logical และ complex คุณปฏิบัติ R Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน R Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน R Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “ภาพรวมระบบชนิดข้อมูลของ R” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน R Academy นี้ได้ไหม

ได้ บทเรียน R Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ภาพรวมระบบชนิดข้อมูลของ R
  2. การแปลงระหว่างชนิดข้อมูลตัวเลข
  3. การแปลงชนิดตรรกะและอักขระ
  4. ข้อควรระวังและแนวทางปฏิบัติที่ดีในการบังคับชนิดข้อมูล
← กลับไปที่ R Academy