0Pricing
R Academy · درس

نظرة عامة على نظام الأنواع في R

افهم أنواع double وinteger وcharacter وlogical وcomplex.

نظرة عامة على نظام الأنواع في R درس مجاني في R Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 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). وكلاهما نوعان فرعيان من النوع الرقمي.

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 يحتوي على قيم منطقية (Boolean). لاحظ أن 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
  • يؤدي مزج الأنواع في متجه إلى تحويل تلقائي إلى أعلى نوع
  • تدقق 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» مجاني؟

نعم — نص درس «نظرة عامة على نظام الأنواع في R» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة R Academy، انتقل إلى CoddyKit PRO. تتضمن دورة R Academy 4 دروس في المجموع.

ماذا ستتعلم في «نظرة عامة على نظام الأنواع في R»؟

افهم أنواع double وinteger وcharacter وlogical وcomplex. تتمرن على R Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ R Academy؟

لا تُشترط خبرة سابقة. R Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «نظرة عامة على نظام الأنواع في R»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس R Academy هذا؟

نعم. كل درس في R Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. نظرة عامة على نظام الأنواع في R
  2. التحويل بين الأنواع الرقمية
  3. التحويل بين الأنواع المنطقية والنصية
  4. مزالق الإكراه وأفضل الممارسات
← العودة إلى R Academy