โปรเจกต์ R และการจัดการพื้นที่ทำงาน
สร้างโปรเจกต์ RStudio และจัดการ .RData, .Rhistory และ .Renviron
โปรเจกต์ R และการจัดการพื้นที่ทำงาน เป็นบทเรียน R Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน R Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส R Academy มีบทเรียนทั้งหมด 4 บทเรียน
พื้นที่ทำงานของ R: .RData และ .Rhistory
ตามค่าเริ่มต้น เมื่อคุณออกจาก R โปรแกรมจะถามว่าต้องการบันทึกพื้นที่ทำงานหรือไม่ ซึ่งหมายถึงออบเจ็กต์ทั้งหมดในหน่วยความจำ ลงในไฟล์ซ่อนชื่อ .RData ในไดเรกทอรีทำงาน ประวัติคำสั่งของคุณจะถูกบันทึกลงใน .Rhistory ไฟล์เหล่านี้จะถูกโหลดโดยอัตโนมัติในเซสชันถัดไป
ความสะดวกนี้อาจเป็นกับดักต่อการทำซ้ำผลลัพธ์
# .RData: binary snapshot of all objects in the global environment
# .Rhistory: text file of every command you typed
# See what would be saved right now:
cat('Objects that would be saved:', length(ls()), '\n')
cat('Their names:', paste(ls(), collapse = ', '))
# Workspace saving is controlled by:
# Tools -> Global Options -> General -> Save workspace (NEVER recommended)
# Or at startup: R --no-save --no-restoreเหตุใดจึงควรหลีกเลี่ยงการบันทึก .RData โดยอัตโนมัติ
การพึ่งพา .RData ทำให้ไม่สามารถทำซ้ำผลลัพธ์ตั้งแต่ต้นได้ ออบเจ็กต์จะสะสมอย่างมองไม่เห็นข้ามเซสชัน ตัวแปรเก่าอาจบดบังตัวแปรใหม่ และผู้ร่วมงานไม่สามารถจำลองสภาพแวดล้อมของคุณได้ วิธีแก้คือ อย่าบันทึกพื้นที่ทำงาน แต่ให้สร้างพื้นที่ทำงานขึ้นใหม่ทุกครั้งด้วยการเรียกใช้สคริปต์ของคุณ
# The recommended R startup setting (in RStudio):
# Tools -> Global Options -> General
# Restore .RData at startup: UNCHECKED
# Save workspace on exit: NEVER
# This forces you to write scripts that are fully self-contained.
# A fresh session that runs cleanly = reproducible analysis.
# Equivalent command-line flags:
# R --no-save --no-restore
cat('Always start fresh!')rm() — ล้างพื้นที่ทำงาน
rm(list = ls()) เป็นวิธีมาตรฐานในการลบออบเจ็กต์ทั้งหมดออกจากสภาพแวดล้อมส่วนกลาง โดยจำลองเซสชันใหม่โดยไม่ต้องเริ่ม R ใหม่ มักวางคำสั่งนี้ไว้ด้านบนสุดของสคริปต์ เพื่อให้แน่ใจว่าการเรียกใช้แต่ละครั้งเริ่มจากพื้นที่ว่าง
# Create some objects
a <- 1
b <- 'hello'
df <- data.frame(x = 1:3)
cat('Before rm:', length(ls()), 'objects\n')
# Remove specific objects
rm(a, b)
cat('After rm(a,b):', length(ls()), 'objects\n')
# Remove ALL objects in global environment
rm(list = ls())
cat('After rm(list=ls()):', length(ls()), 'objects')options() — การตั้งค่าเซสชันส่วนกลาง
options() ควบคุมพฤติกรรมหลายอย่างทั่วทั้งเซสชัน R ตัวเลือกที่มักกำหนดบ่อยสองรายการคือ scipen (ค่าปรับการใช้รูปแบบเลขยกกำลัง) และ digits (จำนวนหลักนัยสำคัญที่พิมพ์ออกมา) ให้กำหนดตัวเลือกเหล่านี้ไว้ด้านบนของสคริปต์เพื่อให้ผลลัพธ์สอดคล้องกัน
# Default behavior:
cat(0.000123456, '\n') # may show 1.23456e-04
# Suppress scientific notation (positive scipen = prefer fixed)
options(scipen = 999)
cat(0.000123456, '\n') # now shows 0.000123456
# Control printed digits
options(digits = 4)
cat(pi, '\n') # 3.142
# Check current options:
cat('scipen:', getOption('scipen'), '\n')
cat('digits:', getOption('digits')).Renviron — ตัวแปรสภาพแวดล้อม
ไฟล์ .Renviron ใช้จัดเก็บตัวแปรสภาพแวดล้อมที่ R โหลดเมื่อเริ่มต้นระบบ ไฟล์นี้เหมาะสำหรับเก็บข้อมูลลับและค่าการกำหนดค่า เช่น คีย์ API รหัสผ่านฐานข้อมูล และเส้นทางระบบไฟล์ เพื่อไม่ให้ข้อมูลเหล่านี้อยู่ในซอร์สโค้ดของคุณ
# .Renviron file (in ~ or project root):
# DATABASE_URL=postgres://user:pass@host/db
# OPENAI_API_KEY=sk-abc123
# DATA_ROOT=/data/shared
# Read in R:
db_url <- Sys.getenv('DATABASE_URL')
api_key <- Sys.getenv('OPENAI_API_KEY', unset = 'KEY_NOT_SET')
cat('DB URL set:', nchar(db_url) > 0, '\n')
cat('API key:', api_key)
# To edit .Renviron:
# usethis::edit_r_environ() <- if usethis is installed
# file.edit('~/.Renviron') <- base RsaveRDS() — บันทึกออบเจ็กต์เดียว
saveRDS() แปลงออบเจ็กต์ R เดียวให้เป็นรูปแบบอนุกรมและบันทึกลงในไฟล์ .rds วิธีนี้เหมาะสำหรับเก็บผลลัพธ์จากการคำนวณที่ใช้เวลานานไว้ชั่วคราว เนื่องจากไฟล์จะเก็บออบเจ็กต์ไว้เพียงหนึ่งรายการ และคุณควบคุมได้อย่างชัดเจนว่าจะบันทึกและโหลดอะไร
# Create an object to save
result_list <- list(
model = 'linear_regression',
r2 = 0.87,
rmse = 12.4,
created = Sys.time()
)
# Save to disk
tmp_rds <- tempfile(fileext = '.rds')
saveRDS(result_list, file = tmp_rds)
cat('Saved to:', tmp_rds, '\n')
# Load it back (even in a fresh session)
loaded <- readRDS(tmp_rds)
cat('R-squared:', loaded$r2)readRDS() — เรียกคืนออบเจ็กต์เดียว
readRDS() แปลงไฟล์ .rds กลับมาเป็นออบเจ็กต์ R ต่างจาก load() ตรงที่ต้องกำหนดค่าที่ส่งคืนให้กับชื่อหนึ่งชื่อ ดังนั้นคุณจึงโหลดไฟล์เดียวกันด้วยชื่อต่างกันได้ในส่วนต่าง ๆ ของโค้ด
# Suppose model_results.rds was saved earlier
tmp <- tempfile(fileext = '.rds')
saveRDS(list(coef = c(1.2, 3.4), n = 100), tmp)
# Load with a meaningful name:
model_output <- readRDS(tmp)
cat('Coefficients:', model_output$coef, '\n')
cat('Sample size:', model_output$n, '\n')
# Key advantage over load():
# With load(), the name is baked into the file.
# With readRDS(), YOU choose the name on load.
cat('readRDS gives you naming control')save() และ load() — ออบเจ็กต์หลายรายการ
save() แปลงออบเจ็กต์ที่ตั้งชื่อไว้หนึ่งรายการหรือมากกว่าให้เป็นรูปแบบอนุกรมและบันทึกลงในไฟล์ .RData ส่วน load() จะเรียกคืนออบเจ็กต์เหล่านั้น แต่ชื่อเดิมจะถูกเรียกคืนโดยอัตโนมัติ ซึ่งอาจเขียนทับออบเจ็กต์ที่มีอยู่เดิมโดยไม่แจ้งเตือน โปรดใช้อย่างระมัดระวัง
# Save multiple objects at once
scores <- c(85, 92, 78)
labels <- c('Alice', 'Bob', 'Carol')
tmp_rdata <- tempfile(fileext = '.RData')
save(scores, labels, file = tmp_rdata)
cat('Saved to:', tmp_rdata, '\n')
# Remove originals to simulate a new session
rm(scores, labels)
cat('Removed. Objects now:', length(ls()), '\n')
# Load restores original names automatically
load(tmp_rdata)
cat('Restored scores:', scores)saveRDS เทียบกับ save — ควรใช้แบบใดเมื่อใด
ใช้ saveRDS() กับออบเจ็กต์เดียวเมื่อคุณต้องการควบคุมชื่อขณะโหลดอย่างเต็มที่ เหมาะสำหรับผลลัพธ์ของแบบจำลอง ชุดข้อมูลที่ประมวลผลแล้ว และผลลัพธ์ที่เก็บไว้ชั่วคราว ใช้ save() เฉพาะเมื่อจำเป็นต้องรวมออบเจ็กต์หลายรายการที่มีชื่อไว้ด้วยกันสำหรับกระบวนการทำงานร่วมกับผู้ร่วมงานโดยเฉพาะ
# saveRDS: one object, you name it on load
# saveRDS(my_model, 'outputs/model_v2.rds')
# m <- readRDS('outputs/model_v2.rds') <- your name choice
# save: multiple objects, names fixed in the file
# save(model, validation_df, file = 'outputs/session.RData')
# load('outputs/session.RData') <- restores 'model' and 'validation_df'
# Practical rule:
# saveRDS for caching single results
# save for snapshots shared between collaborators
cat('saveRDS is usually the better choice')การตรวจสอบและเรียกคืน options()
ตัวเลือกที่กำหนดระหว่างเซสชันจะมีผลเฉพาะเซสชันนั้น เพื่อให้สคริปต์ทำงานได้ในตัวเอง ให้กำหนดตัวเลือกที่จำเป็นไว้ด้านบน และอาจเรียกคืนค่าเดิมเมื่อสคริปต์ทำงานเสร็จโดยใช้ on.exit()
# Capture current options before changing
old_options <- options(scipen = 999, digits = 3)
# Use on.exit to restore them no matter what
on.exit(options(old_options), add = TRUE)
# Now do your work
cat(pi, '\n') # 3.14
cat(1234567.89, '\n') # 1234568 (no sci notation)
# When function or script exits, options are restored automatically
cat('Options will restore on exit')โครงการ RStudio สำหรับจัดการพื้นที่ทำงาน
โครงการ RStudio (ไฟล์ .Rproj) จะกำหนดไดเรกทอรีทำงานเป็นรากของโครงการโดยอัตโนมัติ เก็บ .Rhistory แยกกันสำหรับแต่ละโครงการ และแยกตัวเลือกของเซสชันออกจากกัน นี่เป็นวิธีมาตรฐานในการจัดการโครงการ R ที่ทำงานได้ในตัวเอง
# When you open a .Rproj file, RStudio automatically:
# 1. Sets working directory to the project root
# 2. Loads the project-specific .Rhistory
# 3. Optionally restores project .RData
# Best practice for new projects:
# File -> New Project -> New Directory -> New Project
# Your project structure then looks like:
# my_project/
# my_project.Rproj
# .Rprofile (project-level options)
# .Renviron (project-level env vars)
# R/ (scripts)
# data/ (raw data)
# output/ (results)
cat('RStudio Projects = clean workspaces')ตรวจสอบด่วน
คุณต้องการบันทึกดาตาเฟรม R เดียวชื่อ clean_data ลงดิสก์ เพื่อให้โหลดกลับมาในสคริปต์อื่นโดยใช้ชื่อตัวแปรใดก็ได้ที่คุณเลือก คุณควรใช้ฟังก์ชันใด
การจัดการพื้นที่ทำงาน — ประเด็นสำคัญ
พื้นที่ทำงาน R ที่จัดการอย่างดีคือรากฐานของการวิเคราะห์ที่ทำซ้ำผลลัพธ์ได้:
.RData/.Rhistory— ไฟล์พื้นที่ทำงานที่บันทึกโดยอัตโนมัติ (ปิดการบันทึกอัตโนมัติ!)rm(list = ls())— ลบออบเจ็กต์ทั้งหมดเพื่อเริ่มจากพื้นที่ว่างoptions(scipen = 999, digits = 4)— ควบคุมรูปแบบตัวเลข.Renviron— จัดเก็บคีย์ API และเส้นทางเป็นตัวแปรสภาพแวดล้อมsaveRDS(obj, 'file.rds')— เก็บออบเจ็กต์เดียวไว้ชั่วคราวreadRDS('file.rds')— เรียกคืนโดยใช้ชื่อของคุณเองsave(a, b, file = 'session.RData')— รวมออบเจ็กต์หลายรายการload('session.RData')— เรียกคืนออบเจ็กต์ที่รวมไว้ทั้งหมด- ใช้โครงการ RStudioเพื่อจัดการไดเรกทอรีทำงานโดยอัตโนมัติ
# Typical script header for clean, reproducible analysis:
rm(list = ls()) # clean workspace
options(scipen = 999, digits = 4) # formatting
# Load secrets from .Renviron:
db_url <- Sys.getenv('DATABASE_URL')
# Load cached data if available:
cache_file <- file.path('cache', 'processed_data.rds')
if (file.exists(cache_file)) {
df <- readRDS(cache_file)
cat('Loaded from cache\n')
} else {
cat('Cache not found, run data_prep.R first\n')
}
cat('Workspace ready')คำถามที่พบบ่อย
บทเรียน “โปรเจกต์ R และการจัดการพื้นที่ทำงาน” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “โปรเจกต์ R และการจัดการพื้นที่ทำงาน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส R Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส R Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “โปรเจกต์ R และการจัดการพื้นที่ทำงาน”
สร้างโปรเจกต์ RStudio และจัดการ .RData, .Rhistory และ .Renviron คุณปฏิบัติ R Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน R Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน R Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “โปรเจกต์ R และการจัดการพื้นที่ทำงาน” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน R Academy นี้ได้ไหม
ได้ บทเรียน R Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การใช้ source() เพื่อโหลดสคริปต์
- ความคิดเห็น รูปแบบ และความอ่านง่าย
- ไดเรกทอรีทำงานและเส้นทางไฟล์
- โปรเจกต์ R และการจัดการพื้นที่ทำงาน