1  Biên tập và ghi chú kỹ thuật

Trong chương này, chúng tôi sẽ mô tả triết lý và phong cách viết code, cũng như các quyết định biên tập cụ thể được thực hiện trong việc tạo ra cuốn sổ tay này.

1.1 Cách tiếp cận và phong cách

Độc giả tiềm năng của cuốn sách này là rất lớn, bao gồm những người hoàn toàn mới đối với R, và cả những người dùng R có kinh nghiệm đang tìm kiếm cho mình các phương pháp và mẹo hay nhất. Vì vậy, cuốn sách cần phải vừa dễ tiếp cận vừa ngắn gọn. Do đó, cách tiếp cận của chúng tôi là cung cấp lượng văn bản giải thích vừa đủ để một người mới sử dụng R cũng có thể áp dụng code và hiểu code đang làm gì.

Một vài điểm lưu ý:

  • Đây là cuốn sách tham khảo về code đi kèm với những ví dụ tương đối ngắn gọn - không phải một cuốn sách giáo khoa về R hay khoa học dữ liệu
  • Đây là một cuốn sổ tay về R sử dụng trong dịch tễ học ứng dụng - không phải là một hướng dẫn về các phương pháp của dịch tễ học ứng dụng
  • Cuốn sách dự kiến sẽ luôn được thay đổi và cập nhập do các R packages tối ưu cho một nhiệm vụ luôn được thay đổi thường xuyên, vì vậy chúng tôi hoan nghênh những thảo luận về những điều được nhấn mạnh trong cuốn sách này

R packages

Quá nhiều lựa chọn

Một trong những khía cạnh thách thức nhất của việc học R là bạn biết package nào được sử dụng trong trường hợp nào. Việc vật lộn với một công việc mà chỉ sau này bạn nhận ra là có một package R giúp bạn thực hiện tất cả những điều đó trong một dòng lệnh là điều không hề hiếm gặp!

Trong sổ tay này, chúng tôi cố gắng cung cấp cho bạn ít nhất hai cách để hoàn thành công việc: một phương pháp đã thử và đúng (có thể là base R hoặc tidyverse) và một R package đặc biệt được thiết kế riêng cho mục đích đó. Chúng tôi muốn bạn có một số tùy chọn trong trường hợp bạn không thể tải xuống một package nhất định hoặc package đó không hoạt động với bạn.

Khi lựa chọn package để làm việc, chúng tôi ưu tiên các R package và phương pháp tiếp cận đã được cộng đồng thử nghiệm và hiệu chỉnh, giảm thiểu số lượng package được sử dụng trong một phiên làm việc điển hình, bao gồm sự ổn định (không thay đổi thường xuyên) và giúp hoàn thành nhiệm vụ một cách đơn giản và gọn gàng

Cuốn sách này ưu tiện các package và câu lệnh từ thư viện tidyverse. Tidyverse là một tuyển tập các R package được thiết kế dành riêng cho khoa học dữ liệu, trong đó các package này chia sẻ nền tảng ngữ pháp và cấu trúc dữ liệu chung. Tất cả các package từ thư viện tidyverse có thể được cài đặt hoặc gọi thông qua thư viện tidyverse. Đọc thêm tại tidyverse website.

Khi thích hợp, chúng tôi cũng cung cấp các tùy chọn code sử dụng base R - là các packages và hàm có sẵn của R khi cài đặt. Điều này là do chúng tôi nhận thấy rằng một số độc giả của cuốn sách này có thể không có Internet tốt để tải xuống các package bổ sung.

Liên kết các hàm và packages một cách rõ ràng

Trong các hướng dẫn về R thường rất khó chịu khi một hàm được hiển thị trong code, nhưng bạn không biết hàm đó đến từ package nào! Chúng tôi cố gắng tránh tình trạng này.

Trong các đoạn văn bản trần thuật, tên các package được viết in đậm (ví dụ: dplyr) và các hàm được viết như sau: mutate(). Chúng tôi cố gắng nói rõ ràng về một hàm đến từ package nào, bằng cách tham chiếu package đó trong đoạn văn bản gần đó hoặc nhấn mạnh package đó một cách rõ ràng trong đoạn code như sau: dplyr::mutate(). Điều này nhìn có vẻ thừa thãi, nhưng chúng tôi làm điều đó là có mục đích.

Tham khảo thêm chương R cơ bản để hiểu thêm về package và hàm.

Phong cách viết code

Trong sổ tay này, chúng tôi thường viết theo phong cách “thêm dòng mới”, điều này làm cho code trông có vẻ “dài hơn”. Chúng tôi làm vậy vì một vài lý do sau đây:

  • Chúng tôi có thể viết các giải thích bằng # bên cạnh mỗi phần nhỏ của code
  • Nhìn chung, code dài hơn (theo chiều dọc) thì dễ đọc hơn
  • Nó cũng dễ đọc hơn trong một diện tích màn hình hẹp (không cần kéo thanh điều hướng trái phải)
  • Từ việc thụt lề, có thể dễ dàng hơn để biết arguments nào thuộc về hàm nào

Kết quả là, code lẽ ra sẽ được viết trông như thế này:

linelist %>% 
  group_by(hospital) %>%  # group rows by hospital
  slice_max(date, n = 1, with_ties = F) # if there's a tie (of date), take the first row

…bây giờ sẽ được viết như thế này:

linelist %>% 
  group_by(hospital) %>% # group rows by hospital
  slice_max(
    date,                # keep row per group with maximum date value 
    n = 1,               # keep only the single highest row 
    with_ties = F)       # if there's a tie (of date), take the first row

Code R thường không bị ảnh hưởng bởi thêm các dòng mới hoặc thụt lề. Khi viết code, nếu bạn xuống dòng ngay sau dấu phẩy thì R sẽ tự động thụt lề cho bạn.

Chúng tôi cũng sử dụng rất nhiều những khoảng cách (ví dụ n = 1 thay vì n=1) vì nó giúp dễ đọc hơn. Hãy văn minh với những người đang đọc code của bạn!

Danh pháp

Trong sổ tay này, chúng tôi thường đề cập đến “cột” và “hàng” thay vì dùng “biến” và “quan sát”. Như đã giải thích trong phần sơ lược về “tidy data”, hầu hết các bộ dữ liệu thống kê dịch tễ học bao gồm các hàng, cột và giá trị theo cấu trúc

Biến số chứa các giá trị đo lường của cùng một thuộc tính (như nhóm tuổi, kết cục hoặc ngày khởi phát). Các quan sát bao gồm tất cả các giá trị được đo trên cùng một đơn vị (ví dụ: người, địa điểm hoặc mẫu phòng thí nghiệm). Vì vậy, những khía cạnh này có thể khó được định nghĩa một cách cụ thể.

Trong một bộ dữ liệu “tidy”, mỗi cột là một biến số, mỗi hàng là một quan sát và mỗi ô là một giá trị duy nhất. Tuy nhiên, bạn có thể gặp một số bộ dữ liệu không phù hợp với quy luật này - bộ dữ liệu định dạng “ngang” có thể có một biến số được chia thành nhiều cột (xem ví dụ trong chương Pivoting dữ liệu). Tương tự như vậy, các quan sát có thể được trải thành nhiều hàng.

Phần lớn cuốn sách này tập trung vào quản lý và biến đổi dữ liệu, vì vậy việc đề cập đến cấu trúc dữ liệu cụ thể của các hàng và cột sẽ liên quan hơn là đề cập tới các khái niệm trừu tượng như các quan sát và biến. Các trường hợp ngoại lệ chủ yếu xảy ra trong các chương về phân tích dữ liệu, ở đó chúng tôi đề cập nhiều hơn đến các biến số và quan sát.

Lưu ý

Dưới đây là một vài lưu ý bạn có thể gặp trong cuốn sách:

GHI CHÚ: Đây là ghi chú
MẸO: Đây là mẹo.
CẨN TRỌNG: Đây là ghi chú cẩn trọng.
NGUY HIỂM: Đây là một cảnh báo.

1.2 Quyết định biên tập

Dưới đây, chúng tôi ghi lại các quyết định biên tập quan trọng về việc lựa chọn package và hàm. Nếu bạn không đồng ý hoặc muốn đưa ra một công cụ mới để xem xét, vui lòng tham gia/bắt đầu cuộc thảo luận trên Trang Github của chúng tôi.

Bảng các package, hàm, và các quyết định biên tập khác

Chủ đề Cân nhắc Lựa chọn Lý do ngắn gọn
Phương pháp code chung tidyverse, data.table, base tidyverse, với 1 chương về data.table, các giải pháp thay thế từ base R cho người đọc không có internet | tidyverse dễ đọc, phổ biến, được dạy nhiều nhất
Gọi Package library(),install.packages(), require(), pacman pacman Rút ngắn và đơn giản hóa code cho hầu hết các trường hợp cài đặt / tải nhiều package
Nhập và xuất rio, và các package khác rio Dễ dàng cho nhiều kiểu file
Nhóm để tổng hợp thống kê dplyr group_by(), stats aggregate() dplyr group_by() Thống nhất với tidyverse
Pivoting tidyr (các hàm pivot), reshape2 (melt/cast), tidyr (spread/gather) tidyr (các hàm pivot) reshape2 đã nghỉ hưu tidyr sử dụng các hàm pivot ở phiên bản v1.0.0
Làm sạch tên cột linelist, janitor janitor Hợp nhất các package được nhắc đến
Epiweeks lubridate, aweek, tsibble, zoo thông thường là lubridate ,các package khác tùy trường hợp cụ thể | lubridate dễ đọc, có tính nhất quán, và triển vọng bảo trì gói |
Nhãn ggplot labs(), ggtitle()/ylab()/xlab() labs() tất cả các nhãn ở một nơi, đơn giản
Chuyển sang factor factor(), forcats forcats các hàm khác nhau của nó cũng chuyển đổi thành factor trong cùng một lệnh
Đường cong dịch bệnh incidence, ggplot2, EpiCurve incidence2 thì nhanh, ggplot2 thì chi tiết tùy theo
Sự kết hợp paste(), paste0(), str_glue(), glue() str_glue() Nhiều cú pháp đơn giản hơn hàm paste; nằm bên trong stringr

1.3 Các bản sửa đổi chính

Ngày Thay đổi chính
10 Tháng Năm 2021 Phát hành phiên bản 1.0.0

1.4 Thông tin phiên làm việc (R, RStudio, packages)

Dưới đây là thông tin về các phiên bản của các R package, RStudio và R được sử dụng trong quá trình rendering cuốn sách này.

sessioninfo::session_info()
─ Session info ───────────────────────────────────────────────────────────────
 setting  value
 version  R version 4.3.2 (2023-10-31 ucrt)
 os       Windows 11 x64 (build 22621)
 system   x86_64, mingw32
 ui       RTerm
 language (EN)
 collate  English_United States.utf8
 ctype    English_United States.utf8
 tz       Asia/Bangkok
 date     2024-09-18
 pandoc   3.2.1 @ C:/PROGRA~1/Pandoc/ (via rmarkdown)

─ Packages ───────────────────────────────────────────────────────────────────
 package     * version date (UTC) lib source
 cli           3.6.3   2024-06-21 [1] CRAN (R 4.3.3)
 digest        0.6.35  2024-03-11 [1] CRAN (R 4.3.3)
 evaluate      0.24.0  2024-06-10 [1] CRAN (R 4.3.3)
 fastmap       1.2.0   2024-05-15 [1] CRAN (R 4.3.3)
 htmltools     0.5.8   2024-03-25 [1] CRAN (R 4.3.3)
 htmlwidgets   1.6.4   2023-12-06 [2] CRAN (R 4.3.2)
 jsonlite      1.8.8   2023-12-04 [1] CRAN (R 4.3.3)
 knitr         1.48    2024-07-07 [1] CRAN (R 4.3.3)
 rlang         1.1.4   2024-06-04 [1] CRAN (R 4.3.3)
 rmarkdown     2.28    2024-08-17 [1] CRAN (R 4.3.3)
 sessioninfo   1.2.2   2021-12-06 [2] CRAN (R 4.3.2)
 xfun          0.46    2024-07-18 [1] CRAN (R 4.3.3)

 [1] C:/Users/ngulu864/AppData/Local/R/win-library/4.3
 [2] C:/Program Files/R/R-4.3.2/library

──────────────────────────────────────────────────────────────────────────────