0Pricing
R Academy · บทเรียน

โปรเจกต์ 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 R

saveRDS() — บันทึกออบเจ็กต์เดียว

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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

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