ความคิดเห็น รูปแบบ และความอ่านง่าย
เขียนโค้ด R ที่สะอาดและมีเอกสารประกอบตามคู่มือรูปแบบ tidyverse
ความคิดเห็น รูปแบบ และความอ่านง่าย เป็นบทเรียน R Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน R Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส R Academy มีบทเรียนทั้งหมด 4 บทเรียน
ข้อคิดเห็นบรรทัดเดียวด้วย #
ใน R อักขระ # ใช้เริ่มข้อคิดเห็น ทุกอย่างตั้งแต่ # จนถึงท้ายบรรทัดจะถูกตัวแปลภาษาข้าม ข้อคิดเห็นมีไว้สำหรับมนุษย์ จึงควรอธิบายว่า เหตุใด จึงทำเช่นนั้น ไม่ใช่เพียงอธิบายว่า ทำอะไร
# This is a comment — R ignores it completely
x <- 42 # inline comment after code
# Bad comment (states the obvious):
y <- y + 1 # add 1 to y
# Good comment (explains intent):
y <- y + 1 # shift index to 1-based for output display
cat('x =', x)หัวข้อส่วนด้วย ------
ธรรมเนียมที่ใช้กันอย่างแพร่หลายใน R คือการสร้าง หัวข้อส่วน โดยเติมเครื่องหมายขีด เครื่องหมายเท่ากับ หรือเครื่องหมายแฮชอย่างน้อยสี่ตัวหลังข้อความข้อคิดเห็น RStudio จะรู้จักรูปแบบเหล่านี้และเพิ่มหัวข้อดังกล่าวลงในเค้าโครงเอกสารเพื่อให้ไปยังส่วนต่าง ๆ ได้ง่าย
# Data Loading -------------------------------------------------------
# This section loads raw CSV files from the data/ folder
# Data Cleaning =======================================================
# Remove duplicates and fix missing values
# Modeling ############################################################
# Fit linear model and evaluate
cat('Section headers improve navigation')ธรรมเนียมการตั้งชื่อ snake_case
คู่มือรูปแบบ tidyverse แนะนำให้ใช้ snake_case กับชื่อออบเจ็กต์ทั้งหมด โดยใช้คำตัวพิมพ์เล็กคั่นด้วยขีดล่าง ควรหลีกเลี่ยงจุด ซึ่งดูคล้ายการเรียกใช้เมธอดในภาษาอื่น และหลีกเลี่ยง camelCase เพื่อให้รูปแบบสอดคล้องกัน
# Good: snake_case
user_age <- 25
monthly_revenue <- 15000
calculate_mean <- function(x) mean(x)
# Avoid: dots in names (looks like OOP method calls)
user.age <- 25 # confusing
# Avoid: camelCase (inconsistent with tidyverse)
userAge <- 25
# Avoid: ALL_CAPS (reserved for true constants by convention)
MAX_RETRIES <- 3 # acceptable for config constants only
cat('snake_case wins')เว้นวรรครอบตัวดำเนินการ
ควรเว้นวรรคทั้งสองด้านของตัวดำเนินการ กำหนดค่า และ เปรียบเทียบ เสมอ วิธีนี้ช่วยให้อ่านง่ายขึ้นอย่างมาก ข้อยกเว้นคือภายในรายการอาร์กิวเมนต์ของฟังก์ชัน ซึ่ง = ใช้เชื่อมชื่ออาร์กิวเมนต์
# Good: spaces around <- and operators
x <- 10
y <- x + 5
result <- x * y - 2
is_valid <- x > 0 & y < 100
# Bad: cramped
x<-10
y<-x+5
# Function arguments: = without extra spaces is fine
mean(x = c(1, 2, 3), na.rm = TRUE)
# Comparison operators also need spaces
if (x > 0) cat('positive')
if (x >= 0 & y <= 100) cat('in range')ใช้ <- แทน = สำหรับการกำหนดค่า
แม้ R จะอนุญาตให้ใช้ = สำหรับการกำหนดค่าในระดับบนสุด แต่ธรรมเนียมหลักของชุมชนคือใช้ <- สำหรับกำหนดค่าให้ออบเจ็กต์ และสงวน = ไว้เฉพาะสำหรับค่าของอาร์กิวเมนต์ฟังก์ชัน ความแตกต่างนี้ช่วยให้อ่านโค้ดและเข้าใจได้ทันทีง่ายขึ้นมาก
# Correct: <- for assignment
name <- 'Alice'
score <- 95.5
results <- c(1, 2, 3)
# Correct: = inside function calls
round(3.14159, digits = 2)
read.csv('data.csv', header = TRUE, sep = ',')
# Avoid: = for top-level assignment
# name = 'Alice' <- works but not idiomatic
cat('Assignment convention:', name, score)จำกัดความยาวบรรทัดที่ 80 อักขระ
การจำกัดความยาวบรรทัดให้ต่ำกว่า 80 อักขระ ช่วยให้โค้ดอ่านง่ายในตัวแก้ไขแบบแบ่งพื้นที่ หน้าที่พิมพ์ออกมา และเครื่องมือตรวจทานโค้ด ใน RStudio คุณสามารถแสดงเส้นบอกระยะที่คอลัมน์ 80 ได้ผ่านเมนู Tools → Global Options → Code → Display
# Bad: one very long line (hard to read)
result <- some_function(argument_one = 'value', argument_two = 100, argument_three = TRUE, argument_four = 'long_string')
# Good: break at commas, indent continuation
result <- some_function(
argument_one = 'value',
argument_two = 100,
argument_three = TRUE,
argument_four = 'long_string'
)
cat('Readable at 80 chars')ไม่ใช้เครื่องหมายอัฒภาค
ต่างจาก JavaScript หรือ C ตรงที่ R ไม่ จำเป็นต้องมีเครื่องหมายอัฒภาคท้ายคำสั่ง คุณสามารถใช้เครื่องหมายอัฒภาคเพื่อวางหลายคำสั่งไว้ในบรรทัดเดียวได้ แต่คู่มือรูปแบบแนะนำว่า หนึ่งคำสั่งต่อหนึ่งบรรทัด และไม่ใช้เครื่องหมายอัฒภาค
# Bad: semicolons and multiple statements per line
x <- 1; y <- 2; z <- x + y
# Good: one statement per line
x <- 1
y <- 2
z <- x + y
# The semicolon form is only acceptable in very short
# interactive throwaway code, never in scripts
cat('z =', z)ชื่อตัวแปรที่อ่านเข้าใจง่าย
เลือกชื่อที่ สื่อความหมายโดยไม่ยาวเกินไป กฎง่าย ๆ คือ หากอีกหกเดือนต่อมาคุณต้องใช้เวลาคิดเกินหนึ่งวินาทีเพื่อทำความเข้าใจชื่อตัวแปร ชื่อนั้นอาจสั้นเกินไปหรือคลุมเครือเกินไป
# Too cryptic:
d <- read.csv('data.csv')
tmp <- d[d$v1 > 0, ]
r <- lm(v2 ~ v1, data = tmp)
# Good names:
sales_data <- read.csv('data.csv')
positive_rows <- sales_data[sales_data$revenue > 0, ]
revenue_model <- lm(profit ~ revenue, data = positive_rows)
# Avoid abbreviations that are not universally understood:
# n_obs is fine (number of observations)
# nrv is not (nobody knows what this is)
cat('Names tell the story')วงเล็บปีกกาและการเยื้องบรรทัด
คู่มือรูปแบบ tidyverse กำหนดให้วงเล็บปีกกาเปิด { อยู่ในบรรทัดเดียวกับคำสั่ง และวงเล็บปีกกาปิด } อยู่ในบรรทัดของตนเอง ให้ใช้ 2 ช่องว่าง สำหรับการเยื้องบรรทัด ไม่ใช่แท็บ การเยื้องที่สม่ำเสมอมีความสำคัญอย่างยิ่งต่อการอ่านตรรกะที่ซ้อนกัน
# Good style: brace on same line, 2-space indent
if (x > 0) {
cat('positive\n')
} else {
cat('non-positive\n')
}
# Good function definition:
calculate_bmi <- function(weight_kg, height_m) {
bmi <- weight_kg / height_m^2
round(bmi, 1)
}
cat('BMI:', calculate_bmi(70, 1.75))การเว้นวรรคภายในวงเล็บและหลังจุลภาค
เว้นวรรคหลังจุลภาคทุกตัว เช่นเดียวกับการเขียนภาษาอังกฤษ แต่ ไม่เว้นวรรคก่อนจุลภาคหรือทันทีภายในวงเล็บ วิธีนี้สอดคล้องกับสัญลักษณ์ทางคณิตศาสตร์และช่วยให้อ่านการระบุดัชนีได้ง่าย
# Good: space after comma, not before
x <- c(1, 2, 3, 4, 5)
m <- matrix(1:9, nrow = 3, ncol = 3)
# Subsetting: no space before [ or inside []
first_row <- m[1, ] # good
value <- m[2, 3] # good
# Bad:
# c(1,2,3) <- no space after comma
# m[ 1, ] <- space after [
# m[1 , ] <- space before comma
cat('Spacing is consistent')การใช้ styler และ lintr
มีเครื่องมือสองรายการที่ช่วยบังคับใช้รูปแบบใน R โดยอัตโนมัติ เครื่องมือ จัดรูปแบบโค้ดจะจัดรูปแบบโค้ดของคุณใหม่ให้ตรงกับคู่มือรูปแบบ tidyverse ส่วนเครื่องมือ ตรวจสอบโค้ดจะตรวจสอบรูปแบบและข้อผิดพลาดที่อาจเกิดขึ้นแบบสถิติโดยไม่เรียกใช้โค้ด ทั้งสองรายการทำงานร่วมกับ RStudio ได้
# styler: reformat a file automatically
# install.packages('styler')
# styler::style_file('my_script.R')
# styler: reformat the whole project
# styler::style_dir('R/')
# lintr: check for style and potential bugs
# install.packages('lintr')
# lintr::lint('my_script.R')
# lintr reports issues like:
# line 10: [object_name_linter] Variable 'myVar' should use snake_case
# line 15: [spaces_around_ops_linter] No space before '<-'
cat('Style tools: styler + lintr')ตรวจสอบความเข้าใจอย่างรวดเร็ว
ตามคู่มือรูปแบบ tidyverse วิธีใดต่อไปนี้เป็นวิธีเขียนคำสั่งกำหนดค่าใน R ที่ถูกต้อง
รูปแบบและความอ่านง่าย — ประเด็นสำคัญ
โค้ด R ที่มีรูปแบบดีดูเป็นมืออาชีพ ดูแลรักษาง่าย และทำงานร่วมกันได้:
#สำหรับข้อคิดเห็น — อธิบายว่า เหตุใด ไม่ใช่เพียง ทำอะไร- ใช้หัวข้อส่วนด้วย
------หรือ======เพื่อการนำทาง - ใช้
snake_caseสำหรับชื่อออบเจ็กต์และฟังก์ชันทั้งหมด - เว้นวรรครอบ
<-,+,==และอื่น ๆ - ใช้
<-สำหรับการกำหนดค่า และใช้=เฉพาะในอาร์กิวเมนต์ฟังก์ชัน - แต่ละบรรทัดยาวได้ไม่เกิน 80 อักขระ — แบ่งการเรียกใช้ที่ยาวออกเป็นหลายบรรทัด
- ไม่ใช้เครื่องหมายอัฒภาค — หนึ่งคำสั่งต่อหนึ่งบรรทัด
- เยื้องบรรทัด 2 ช่องว่าง และวาง
{ในบรรทัดเดียวกัน - ใช้เครื่องมือ จัดรูปแบบโค้ดเพื่อจัดรูปแบบอัตโนมัติ และเครื่องมือ ตรวจสอบโค้ดเพื่อตรวจหาปัญหา
# Putting it all together:
# Calculate summary statistics ----------------------------------------
calculate_summary <- function(values, remove_na = TRUE) {
cleaned <- values[!is.na(values)]
list(
mean = mean(cleaned),
median = median(cleaned),
sd = sd(cleaned)
)
}
test_scores <- c(85, 90, NA, 78, 92, 88)
stats <- calculate_summary(test_scores)
cat('Mean:', stats$mean, '\n')
cat('SD: ', stats$sd)คำถามที่พบบ่อย
บทเรียน “ความคิดเห็น รูปแบบ และความอ่านง่าย” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ความคิดเห็น รูปแบบ และความอ่านง่าย” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส R Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส R Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ความคิดเห็น รูปแบบ และความอ่านง่าย”
เขียนโค้ด R ที่สะอาดและมีเอกสารประกอบตามคู่มือรูปแบบ tidyverse คุณปฏิบัติ R Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน R Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน R Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “ความคิดเห็น รูปแบบ และความอ่านง่าย” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน R Academy นี้ได้ไหม
ได้ บทเรียน R Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การใช้ source() เพื่อโหลดสคริปต์
- ความคิดเห็น รูปแบบ และความอ่านง่าย
- ไดเรกทอรีทำงานและเส้นทางไฟล์
- โปรเจกต์ R และการจัดการพื้นที่ทำงาน