استخدام source() لتحميل السكربتات
نفّذ سكربتات R الخارجية وشارك الشيفرة بين الملفات باستخدام source().
استخدام source() لتحميل السكربتات درس مجاني في R Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في R Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة R Academy 4 دروس في المجموع.
لماذا نستخدم source()؟
مع نمو مشروعات R، يصبح الاحتفاظ بكل الشيفرة في ملف واحد أمرًا يصعب إدارته. تتيح لك الدالة source() تحميل ملف نصي خارجي بلغة R وتنفيذه، ما يتيح تقسيم عملك إلى وحدات منطقية قابلة لإعادة الاستخدام.
وهذا هو الأساس لتطوير R بطريقة منظمة.
# Imagine helpers.R contains:
# add <- function(a, b) a + b
# multiply <- function(a, b) a * b
# Load it into your main script:
source('helpers.R')
# Now use the functions defined there:
result <- add(3, 5)
cat('Result:', result)صيغة source() الأساسية
أبسط صيغة للدالة source() تتلقى مسار ملف باعتباره وسيطها الوحيد. يُقرأ الملف وتُقيَّم كل تعبيراته في البيئة الحالية، تمامًا كما لو كنت قد كتبت الشيفرة مباشرة.
# source() with a relative path (file in working directory)
source('my_functions.R')
# source() with an absolute path
source('/Users/alice/projects/utils.R')
# After sourcing, all objects and functions defined
# in the file are available in your current session
cat('Script loaded successfully')المعامل echo
يتحكم المعامل echo في طباعة كل تعبير من الملف المُحمَّل إلى وحدة التحكم أثناء تنفيذه. تكون القيمة الافتراضية echo = FALSE، ما يحافظ على نظافة وحدة التحكم. ويكون تعيينه إلى TRUE مفيدًا لتصحيح الأخطاء.
# Default: silent loading (echo = FALSE)
source('helpers.R')
# Verbose: print each expression as it runs
source('helpers.R', echo = TRUE)
# echo = TRUE output looks like:
# > add <- function(a, b) a + b
# > multiply <- function(a, b) a * b
cat('Done')المعاملان print.eval وverbose
يوفر معاملان إضافيان تحكمًا أدق في المخرجات. يتحكم print.eval في طباعة نتائج التعبيرات، على نحو مشابه للوضع التفاعلي. أما verbose فيطبع معلومات إضافية حول عملية التحميل نفسها.
# print.eval: print the VALUE of each expression
source('helpers.R', echo = TRUE, print.eval = TRUE)
# verbose: extra details like file name and line numbers
source('helpers.R', verbose = TRUE)
# Typical use: debugging a complex script
# source('complex_analysis.R', echo = TRUE, print.eval = TRUE)
cat('Parameters explored')المعامل local — نطاق معزول
تشغّل source() الشيفرة افتراضيًا في البيئة العامة، لذلك تظهر جميع الكائنات التي تُنشأ في مساحة عملك. يؤدي تعيين local = TRUE إلى تشغيل البرنامج النصي في بيئة جديدة ومعزولة، مما يحافظ على نظافة مساحة العمل العامة.
# Without local: objects pollute global env
source('data_prep.R') # x, y, temp_df all appear in ls()
# With local = TRUE: objects stay inside
source('data_prep.R', local = TRUE)
# x, y, temp_df are NOT in your global workspace
# Verify nothing leaked:
cat('Objects in workspace:', length(ls()))
# local can also be an environment object:
my_env <- new.env()
source('data_prep.R', local = my_env)استخدام sys.source() للتحميل الأكثر أمانًا
تُعد sys.source() بديلًا منخفض المستوى يتجاوز بعض النفقات الإضافية التي تتطلبها source(). فهي لا تغيّر مجلد العمل ولا تقيّم خيارات keepSource. ويشيع استخدامها في تطوير الحزم والأدوات الداخلية.
# sys.source() loads a file into a specific environment
utils_env <- new.env()
sys.source('utils.R', envir = utils_env)
# Access functions from that environment explicitly
result <- utils_env$my_helper(10)
cat('Result:', result)
# sys.source does not echo or verbose options
# It is faster and more predictable for package internals
cat('sys.source demo complete')المسارات النسبية مقابل المطلقة
يجعل استخدام المسارات النسبية في source() مشروعك قابلًا للنقل، إذ يُحدَّد مسار الملف نسبةً إلى مجلد العمل الحالي. تعمل المسارات المطلقة في كل مكان، لكنها تتعطل عند نقل المشروع. لذا يُفضَّل استخدام المسارات النسبية في أساليب العمل القائمة على المشروعات.
# Relative path — resolved from getwd()
source('R/helpers.R') # good for projects
source('scripts/utils.R') # subfolder
source('../shared/common.R') # parent folder
# Absolute path — fragile, machine-specific
source('/Users/alice/project/R/helpers.R')
# Check current working directory first:
cat('Working dir:', getwd())
# Best practice: use file.path() for clarity
source(file.path('R', 'helpers.R'))تحميل عدة ملفات
يمكنك استدعاء source() عدة مرات لتحميل ملفات مساعدة متعددة. ومن الأنماط الشائعة وجود نقطة إدخال واحدة مثل setup.R أو _targets.R تستدعي جميع الوحدات المطلوبة بالترتيب الصحيح.
# main.R — entry point that loads all modules
source('R/data_loading.R')
source('R/cleaning.R')
source('R/analysis.R')
source('R/plotting.R')
# Or source all .R files in a directory:
r_files <- list.files('R', pattern = '\\.R$', full.names = TRUE)
for (f in r_files) {
source(f)
cat('Loaded:', f, '\n')
}
cat('All modules loaded')source() مع chdir
يغيّر المعامل chdir مجلد العمل مؤقتًا إلى المجلد الذي يحتوي على الملف المُحمَّل أثناء تشغيله. ويفيد ذلك عندما يستخدم برنامج نصي مساعد مساراته النسبية الخاصة داخليًا.
# Suppose scripts/analysis.R uses source('helpers.R')
# and helpers.R is also in scripts/
# Without chdir: R looks for helpers.R in YOUR working dir
source('scripts/analysis.R') # may fail
# With chdir = TRUE: working dir shifts to scripts/ temporarily
source('scripts/analysis.R', chdir = TRUE) # helpers.R found!
# After source() returns, working dir goes back to original
cat('Working dir restored:', getwd())التحميل عند بدء التشغيل عبر .Rprofile
يُشغَّل ملف .Rprofile الموجود في مجلدك الرئيسي (أو جذر المشروع) تلقائيًا في كل مرة تبدأ فيها R. يمكنك استخدام source() داخله لتحميل الأدوات تلقائيًا أو ضبط الخيارات أو إرفاق الحزم عند بدء كل جلسة.
# .Rprofile (in ~ or project root):
# source('~/.R/my_utils.R') # load personal helpers
# options(scipen = 999) # no scientific notation
# To open and edit .Rprofile:
file.edit('~/.Rprofile')
# To see where .Rprofile files are looked for:
cat(Sys.getenv('R_PROFILE_USER'))
# Caution: heavy .Rprofile slows R startup
# Keep it minimal — load only what you always need
cat('.Rprofile concept shown')source() عمليًا — نمط المشروعات
يتمثل أحد الأنماط العملية الواضحة في تنظيم مشروعك بوضع جميع البرامج النصية المساعدة في مجلد R/، ووجود ملف واحد مثل run.R أو main.R يستدعيها. يجعل ذلك المشروع سهل إعادة الإنتاج والمشاركة.
# Project structure:
# my_project/
# run.R <- entry point
# R/
# 01_load.R <- data loading
# 02_clean.R <- data cleaning
# 03_model.R <- modeling
# 04_report.R <- output
# run.R content:
cat('=== Starting analysis ===\n')
source('R/01_load.R')
source('R/02_clean.R')
source('R/03_model.R')
source('R/04_report.R')
cat('=== Analysis complete ===\n')تحقق سريع
ما معامل source() الذي يمنع ظهور الكائنات التي ينشئها الملف المُحمَّل في البيئة العامة؟
source() — أهم النقاط
تُعد source() الطريقة المضمّنة في R لتقسيم الشيفرة إلى وحدات:
source('file.R')— تحميل برنامج نصي وتشغيله في البيئة العامةecho = TRUE— طباعة كل تعبير، وهو مفيد جدًا لتصحيح الأخطاءlocal = TRUE— التشغيل في عزلة من دون تأثيرات جانبية عامةchdir = TRUE— تغيير مجلد العمل مؤقتًا إلى موقع الملفsys.source()— بديل منخفض المستوى يُستخدم في الحزم- فضّل المسارات النسبية وأساليب العمل القائمة على المشروعات لتحقيق قابلية النقل
- استخدم
.Rprofileلتحميل البرامج المساعدة تلقائيًا عند بدء R
# Quick reference
source('R/helpers.R') # basic load
source('R/helpers.R', echo = TRUE) # verbose
source('R/helpers.R', local = TRUE) # isolated
source('scripts/run.R', chdir = TRUE) # local paths
env <- new.env()
sys.source('R/helpers.R', envir = env) # low-level
cat('source() mastered!')الأسئلة الشائعة
هل درس «استخدام source() لتحميل السكربتات» مجاني؟
نعم — نص درس «استخدام source() لتحميل السكربتات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة R Academy، انتقل إلى CoddyKit PRO. تتضمن دورة R Academy 4 دروس في المجموع.
ماذا ستتعلم في «استخدام source() لتحميل السكربتات»؟
نفّذ سكربتات R الخارجية وشارك الشيفرة بين الملفات باستخدام source(). تتمرن على R Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ R Academy؟
لا تُشترط خبرة سابقة. R Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «استخدام source() لتحميل السكربتات»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس R Academy هذا؟
نعم. كل درس في R Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- استخدام source() لتحميل السكربتات
- التعليقات والأسلوب وقابلية القراءة
- أدلة العمل ومسارات الملفات
- مشاريع R وإدارة مساحة العمل