%>%
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
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:
…bây giờ sẽ được viết như thế này:
%>%
linelist group_by(hospital) %>% # group rows by hospital
slice_max(
# keep row per group with maximum date value
date, 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.
::session_info() sessioninfo
─ 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
──────────────────────────────────────────────────────────────────────────────