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