R Academy · บทเรียน

การใช้ source() เพื่อโหลดสคริปต์

เรียกใช้สคริปต์ R ภายนอกและแบ่งปันโค้ดข้ามไฟล์ด้วย source()

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

การใช้ source() เพื่อโหลดสคริปต์ เป็นบทเรียน R Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 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 ควบคุมว่าจะพิมพ์นิพจน์แต่ละรายการจากไฟล์ที่โหลดด้วย source ลงในคอนโซลขณะทำงานหรือไม่ โดยค่าเริ่มต้นคือ 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())

การโหลด source() เมื่อเริ่มต้นผ่าน .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!')
เริ่มต้นได้ฟรี

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

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

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

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

บทเรียน “การใช้ source() เพื่อโหลดสคริปต์” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “การใช้ source() เพื่อโหลดสคริปต์”

เรียกใช้สคริปต์ R ภายนอกและแบ่งปันโค้ดข้ามไฟล์ด้วย source() คุณปฏิบัติ R Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

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

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

บทเรียน “การใช้ source() เพื่อโหลดสคริปต์” ใช้เวลานานแค่ไหน

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

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

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

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

  1. การใช้ source() เพื่อโหลดสคริปต์
  2. ความคิดเห็น รูปแบบ และความอ่านง่าย
  3. ไดเรกทอรีทำงานและเส้นทางไฟล์
  4. โปรเจกต์ R และการจัดการพื้นที่ทำงาน
← กลับไปที่ R Academy