Các nhà dịch tễ học thường phải phân tích lặp lại trên các phân nhóm như quốc gia, quận hoặc nhóm tuổi. Đây chỉ là một vài trong số rất nhiều tình huống yêu cầu việc lặp lại. Mã hóa các thao tác lặp lại của bạn bằng cách sử dụng các phương pháp bên dưới sẽ giúp bạn thực hiện các tác vụ lặp đi lặp lại như vậy nhanh hơn, giảm khả năng xảy ra lỗi và giảm độ dài code. Chương này sẽ giới thiệu hai cách tiếp cận đối với các thao tác lặp lại - sử dụng các vòng lặp for và package purrr. Trong purrr, chúng tôi cũng sẽ cung cấp một số ví dụ về cách tạo và xử lý danh sách
## [1] "Other" "Missing" "St. Mark's Maternity Hospital (SMMH)"
## [4] "Port Hospital" "Military Hospital" "Central Hospital"
5. Chuẩn bị
Gọi packagesĐoạn code này hiển thị cách gọi các packages cần thiết cho phần phân tích. Trong sổ tay này, chúng tôi nhấn mạnh đến hàm
## [1] "Other" "Missing" "St. Mark's Maternity Hospital (SMMH)"
## [4] "Port Hospital" "Military Hospital" "Central Hospital"
6 từ package pacman, cài đặt package nếu cần và gọi nó ra để sử dụng. Bạn cũng có thể gọi các package đã cài đặt với hàm
## [1] "Other" "Missing" "St. Mark's Maternity Hospital (SMMH)"
## [4] "Port Hospital" "Military Hospital" "Central Hospital"
7 từ base R. Xem chương để biết thêm thông tin về packages R. pacman::p_load( rio, # import/export
here, # file locator
purrr, # iteration
tidyverse # data management and visualization
)
Nhập dữ liệuChúng tôi nhập dataset về các trường hợp từ một vụ dịch Ebola mô phỏng. Nếu bạn muốn làm theo, hãy nhấp để tải xuống linelist “sạch” (dưới dạng tệp .rds). Nhập dữ liệu bằng hàm
## [1] "Other" "Missing" "St. Mark's Maternity Hospital (SMMH)"
## [4] "Port Hospital" "Military Hospital" "Central Hospital"
8 từ package rio (nó xử lý nhiều loại tệp như .xlsx, .csv, .rds - xem chương để biết chi tiết). # import the linelist
linelist <- import("linelist_cleaned.rds")
50 hàng đầu tiên của linelist được hiển thị bên dưới. vòng lặp for
vòng lặp for trong RVòng lặp for không được nhấn mạnh trong R, nhưng phổ biến trong các ngôn ngữ lập trình khác. Khi mới bắt đầu, chúng có thể hữu ích để học và thực hành vì chúng dễ “khám phá”, “gỡ lỗi” hơn và nắm bắt chính xác những gì đang xảy ra cho mỗi lần lặp, đặc biệt là khi bạn chưa cảm thấy thoải mái khi viết các hàm của riêng mình. Bạn có thể chuyển nhanh qua phần vòng lặp for tới phần lặp với các hàm được tạo với purrr (xem ). Cấu phần cốt lõiMột vòng lặp for có ba phần cốt lõi: - Chuỗi các phần tử cần lặp lại
- Các thao tác để tiến hành cho mỗi phần tử trong chuỗi
- Vùng chứa cho kết quả (tùy chọn)
Cú pháp cơ bản là:
## [1] "Other" "Missing" "St. Mark's Maternity Hospital (SMMH)"
## [4] "Port Hospital" "Military Hospital" "Central Hospital"
9. Lưu ý dấu ngoặc đơn và dấu ngoặc nhọn. Kết quả có thể được in ra console hoặc được lưu trữ trong một đối tượng vùng chứa. Dưới đây là một ví dụ đơn giản về vòng lặp for. for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}"
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
# There is no "container" in this example
ChuỗiĐây là phần “for” của vòng lặp for - các thao tác sẽ chạy “cho (for)” từng phần tử trong chuỗi. Chuỗi có thể là một loạt các giá trị (ví dụ: tên của khu vực pháp lý, bệnh, tên cột, phần tử danh sách, v.v.) hoặc nó có thể là một chuỗi các số liên tiếp (ví dụ: 1,2,3,4,5). Mỗi cách tiếp cận được mô tả dưới đây có các tiện ích riêng của chúng. Cấu trúc cơ bản của biểu thức chuỗi là # a 'for loop' with character sequence
for (hosp in hospital_names){ # sequence # OPERATIONS HERE
}
0. - Bạn có thể viết bất kỳ ký tự hoặc từ nào thay cho “item” (ví dụ: “i”, “num”, “hosp”, “district”, v.v.). Giá trị của “item” này thay đổi theo từng lần lặp lại của vòng lặp, tiếp tục qua từng giá trị trong vector.
- Vector có thể là các giá trị ký tự, tên cột hoặc có thể là một chuỗi số - đây là những giá trị sẽ thay đổi theo mỗi lần lặp. Bạn có thể sử dụng chúng trong các thao tác vòng lặp for bằng cách sử dụng thuật ngữ “item”.
Ví dụ: chuỗi giá trị ký tự Trong ví dụ này, một vòng lặp được thực hiện cho mỗi giá trị được xác định trước trong một vector ký tự của tên bệnh viện. # make vector of the hospital names
hospital_names <- unique(linelist$hospital)
hospital_names # print
## [1] "Other" "Missing" "St. Mark's Maternity Hospital (SMMH)"
## [4] "Port Hospital" "Military Hospital" "Central Hospital"
Chúng tôi đã chọn thuật ngữ # a 'for loop' with character sequence
for (hosp in hospital_names){ # sequence # OPERATIONS HERE
}
1 để đại diện cho các giá trị từ vector # a 'for loop' with character sequence
for (hosp in hospital_names){ # sequence # OPERATIONS HERE
}
2. Đối với lần lặp đầu tiên của vòng lặp, giá trị của # a 'for loop' with character sequence
for (hosp in hospital_names){ # sequence # OPERATIONS HERE
}
1 sẽ là # a 'for loop' with character sequence
for (hosp in hospital_names){ # sequence # OPERATIONS HERE
}
4. Đối với vòng lặp thứ hai, nó sẽ là # a 'for loop' with character sequence
for (hosp in hospital_names){ # sequence # OPERATIONS HERE
}
5. Và cứ như thế… # a 'for loop' with character sequence
for (hosp in hospital_names){ # sequence # OPERATIONS HERE
}
Ví dụ: chuỗi tên cột Đây là một biến thể của chuỗi ký tự ở trên, trong đó tên của một đối tượng R hiện có được trích xuất và trở thành vector. Ví dụ, tên cột của dataframe. Trong code hoạt động của vòng lặp for, tên cột có thể được sử dụng để lập chỉ mục (tập hợp con) dataframe ban đầu của chúng. Dưới đây, chuỗi là # a 'for loop' with character sequence
for (hosp in hospital_names){ # sequence # OPERATIONS HERE
}
6 (tên cột) của dataframe # a 'for loop' with character sequence
for (hosp in hospital_names){ # sequence # OPERATIONS HERE
}
7. Tên “item” của chúng ta là # a 'for loop' with character sequence
for (hosp in hospital_names){ # sequence # OPERATIONS HERE
}
8, sẽ đại diện cho từng tên cột khi các vòng lặp diễn ra. Với ví dụ này, chúng tôi bao gồm code thao tác bên trong vòng lặp for, được chạy cho mọi giá trị trong chuỗi. Trong code này, các giá trị trình tự (tên cột) được sử dụng để chỉ mục (tập hợp con) từng phần tử một trong # a 'for loop' with character sequence
for (hosp in hospital_names){ # sequence # OPERATIONS HERE
}
7. Như đã dạy trong chương , dấu ngoặc vuông kép `for (col in names(linelist)){ # loop runs for each column in linelist; column name represented by "col" Example operations code - print number of missing values in column print(sum(is.na(linelist[[col]]))) # linelist is indexed by current value of "col"
}` 0 được sử dụng cho tập hợp con. Cột kết quả được chuyển đến `for (col in names(linelist)){ # loop runs for each column in linelist; column name represented by "col" Example operations code - print number of missing values in column print(sum(is.na(linelist[[col]]))) # linelist is indexed by current value of "col"
}` 1, sau đó đến `for (col in names(linelist)){ # loop runs for each column in linelist; column name represented by "col" Example operations code - print number of missing values in column print(sum(is.na(linelist[[col]]))) # linelist is indexed by current value of "col"
}` 2 để tạo ra số giá trị trong cột bị thiếu. Kết quả được in ra console - một số cho mỗi cột. Một lưu ý về lập chỉ mục với tên cột - bất cứ khi nào tham chiếu đến chính cột đó, đừng chỉ viết “col”! # a 'for loop' with character sequence
for (hosp in hospital_names){ # sequence # OPERATIONS HERE
}
8 chỉ đại diện cho tên cột ký tự! Để tham chiếu đến toàn bộ cột, bạn phải sử dụng tên cột dưới dạng chỉ mục trên # a 'for loop' with character sequence
for (hosp in hospital_names){ # sequence # OPERATIONS HERE
}
7 thông qua `for (col in names(linelist)){ # loop runs for each column in linelist; column name represented by "col" Example operations code - print number of missing values in column print(sum(is.na(linelist[[col]]))) # linelist is indexed by current value of "col"
}` 5. `for (col in names(linelist)){ # loop runs for each column in linelist; column name represented by "col" Example operations code - print number of missing values in column print(sum(is.na(linelist[[col]]))) # linelist is indexed by current value of "col"
}`
## [1] 0
## [1] 0
## [1] 2087
## [1] 256
## [1] 0
## [1] 936
## [1] 1323
## [1] 278
## [1] 86
## [1] 0
## [1] 86
## [1] 86
## [1] 86
## [1] 0
## [1] 0
## [1] 0
## [1] 2088
## [1] 2088
## [1] 0
## [1] 0
## [1] 0
## [1] 249
## [1] 249
## [1] 249
## [1] 249
## [1] 249
## [1] 149
## [1] 765
## [1] 0
## [1] 256
Dãy số Theo cách tiếp cận này, dãy số là một chuỗi các số liên tiếp. Do đó, giá trị của “item” không phải là giá trị ký tự (ví dụ: “Central Hospital” hoặc “date_onset”) mà là một số. Điều này rất hữu ích cho việc lặp qua các dataframes, vì bạn có thể sử dụng số “item” bên trong vòng lặp for để lập chỉ mục dataframe theo số hàng. Ví dụ: giả sử bạn muốn lặp qua mọi hàng trong dataframe của mình và trích xuất thông tin nhất định. “Item” của bạn sẽ là số hàng số. Thông thường, “item” trong trường hợp này được viết là `for (col in names(linelist)){ # loop runs for each column in linelist; column name represented by "col" Example operations code - print number of missing values in column print(sum(is.na(linelist[[col]]))) # linelist is indexed by current value of "col"
}` 6. Quá trình vòng lặp for có thể được giải thích bằng lời là “đối với mọi mục trong chuỗi số từ 1 đến tổng số hàng trong dataframe của tôi, hãy thực hiện X”. Đối với lần lặp đầu tiên của vòng lặp, giá trị của “item” `for (col in names(linelist)){ # loop runs for each column in linelist; column name represented by "col" Example operations code - print number of missing values in column print(sum(is.na(linelist[[col]]))) # linelist is indexed by current value of "col"
}` 6 sẽ là 1. Đối với lần lặp thứ hai, `for (col in names(linelist)){ # loop runs for each column in linelist; column name represented by "col" Example operations code - print number of missing values in column print(sum(is.na(linelist[[col]]))) # linelist is indexed by current value of "col"
}` 6 sẽ là 2, v.v. Đây là hình thức của chuỗi trong code: `for (col in names(linelist)){ # loop runs for each column in linelist; column name represented by "col" Example operations code - print number of missing values in column print(sum(is.na(linelist[[col]]))) # linelist is indexed by current value of "col"
}` 9 trong đó `for (col in names(linelist)){ # loop runs for each column in linelist; column name represented by "col" Example operations code - print number of missing values in column print(sum(is.na(linelist[[col]]))) # linelist is indexed by current value of "col"
}` 6 đại diện cho “item”và
## [1] 0
## [1] 0
## [1] 2087
## [1] 256
## [1] 0
## [1] 936
## [1] 1323
## [1] 278
## [1] 86
## [1] 0
## [1] 86
## [1] 86
## [1] 86
## [1] 0
## [1] 0
## [1] 0
## [1] 2088
## [1] 2088
## [1] 0
## [1] 0
## [1] 0
## [1] 249
## [1] 249
## [1] 249
## [1] 249
## [1] 249
## [1] 149
## [1] 765
## [1] 0
## [1] 256
1 tạo ra một chuỗi liên tiếp số từ 1 đến số hàng trong # a 'for loop' with character sequence
for (hosp in hospital_names){ # sequence # OPERATIONS HERE
}
7. # import the linelist
linelist <- import("linelist_cleaned.rds")
0 Nếu bạn muốn chuỗi là số, nhưng bạn đang bắt đầu từ một vector (không phải dataframe), hãy sử dụng hàm tắt
## [1] 0
## [1] 0
## [1] 2087
## [1] 256
## [1] 0
## [1] 936
## [1] 1323
## [1] 278
## [1] 86
## [1] 0
## [1] 86
## [1] 86
## [1] 86
## [1] 0
## [1] 0
## [1] 0
## [1] 2088
## [1] 2088
## [1] 0
## [1] 0
## [1] 0
## [1] 249
## [1] 249
## [1] 249
## [1] 249
## [1] 249
## [1] 149
## [1] 765
## [1] 0
## [1] 256
3 để trả về một dãy số cho mỗi phần tử trong vector. Ví dụ:
## [1] 0
## [1] 0
## [1] 2087
## [1] 256
## [1] 0
## [1] 936
## [1] 1323
## [1] 278
## [1] 86
## [1] 0
## [1] 86
## [1] 86
## [1] 86
## [1] 0
## [1] 0
## [1] 0
## [1] 2088
## [1] 2088
## [1] 0
## [1] 0
## [1] 0
## [1] 249
## [1] 249
## [1] 249
## [1] 249
## [1] 249
## [1] 149
## [1] 765
## [1] 0
## [1] 256
4. Đoạn code dưới đây thực sự trả về các số, sẽ trở thành giá trị của `for (col in names(linelist)){ # loop runs for each column in linelist; column name represented by "col" Example operations code - print number of missing values in column print(sum(is.na(linelist[[col]]))) # linelist is indexed by current value of "col"
}` 6 trong vòng lặp tương ứng của chúng. # import the linelist
linelist <- import("linelist_cleaned.rds")
1 # import the linelist
linelist <- import("linelist_cleaned.rds")
2 Một lợi thế của việc sử dụng các số trong chuỗi là cũng dễ dàng sử dụng số `for (col in names(linelist)){ # loop runs for each column in linelist; column name represented by "col" Example operations code - print number of missing values in column print(sum(is.na(linelist[[col]]))) # linelist is indexed by current value of "col"
}` 6 để lập chỉ mục vùng chứa lưu trữ các kết quả đầu ra của vòng lặp. Có một ví dụ về điều này trong phần Thao tác bên dưới. Các thao tácĐây là code trong dấu ngoặc nhọn
## [1] 0
## [1] 0
## [1] 2087
## [1] 256
## [1] 0
## [1] 936
## [1] 1323
## [1] 278
## [1] 86
## [1] 0
## [1] 86
## [1] 86
## [1] 86
## [1] 0
## [1] 0
## [1] 0
## [1] 2088
## [1] 2088
## [1] 0
## [1] 0
## [1] 0
## [1] 249
## [1] 249
## [1] 249
## [1] 249
## [1] 249
## [1] 149
## [1] 765
## [1] 0
## [1] 256
7 của vòng lặp for. Bạn muốn code này chạy cho từng “item” trong chuỗi. Do đó, hãy thận trọng với mọi phần code của bạn thay đổi bởi “item” đều được mã hóa chính xác để nó thực sự thay đổi! Ví dụ. nhớ sử dụng
## [1] 0
## [1] 0
## [1] 2087
## [1] 256
## [1] 0
## [1] 936
## [1] 1323
## [1] 278
## [1] 86
## [1] 0
## [1] 86
## [1] 86
## [1] 86
## [1] 0
## [1] 0
## [1] 0
## [1] 2088
## [1] 2088
## [1] 0
## [1] 0
## [1] 0
## [1] 249
## [1] 249
## [1] 249
## [1] 249
## [1] 249
## [1] 149
## [1] 765
## [1] 0
## [1] 256
8 để lập chỉ mục. Trong ví dụ dưới đây, chúng tôi lặp lại từng hàng trong # a 'for loop' with character sequence
for (hosp in hospital_names){ # sequence # OPERATIONS HERE
}
7. Giá trị # import the linelist
linelist <- import("linelist_cleaned.rds")
00 và # import the linelist
linelist <- import("linelist_cleaned.rds")
01 của mỗi hàng được dán lại với nhau và được lưu trữ trong vector ký tự vùng chứa # import the linelist
linelist <- import("linelist_cleaned.rds")
02. Lưu ý cách chúng tôi cũng sử dụng lập chỉ mục # import the linelist
linelist <- import("linelist_cleaned.rds")
03 để lưu đầu ra của vòng lặp vào vị trí chính xác trong vector “container”. # import the linelist
linelist <- import("linelist_cleaned.rds")
3 # import the linelist
linelist <- import("linelist_cleaned.rds")
4 Vùng chứaĐôi khi kết quả của vòng lặp for của bạn sẽ được in ra console hoặc cửa sổ RStudio Plots. Lần khác, bạn sẽ muốn lưu trữ các kết quả đầu ra trong một “vùng chứa” để sử dụng sau này. Một vùng chứa như vậy có thể là một vector, một data frame hoặc thậm chí là một danh sách. Hiệu quả nhất là tạo vùng chứa cho các kết quả thậm chí trước khi bắt đầu vòng lặp for. Trong thực tế, điều này có nghĩa là tạo một vector, data frame hoặc danh sách trống. Chúng có thể được tạo bằng các hàm # import the linelist
linelist <- import("linelist_cleaned.rds")
04 cho vectors hoặc danh sách, hoặc với # import the linelist
linelist <- import("linelist_cleaned.rds")
05 và # import the linelist
linelist <- import("linelist_cleaned.rds")
06 cho một data frame. Vector trống Sử dụng # import the linelist
linelist <- import("linelist_cleaned.rds")
04 và chỉ định # import the linelist
linelist <- import("linelist_cleaned.rds")
08 dựa trên lớp phân loại dự kiến của các đối tượng mà bạn sẽ chèn - “double” (để giữ số), “ký tự” hoặc “logic”. Bạn cũng nên đặt trước # import the linelist
linelist <- import("linelist_cleaned.rds")
09. Đây phải là độ dài chuỗi vòng lặp for của bạn. Giả sử bạn muốn lưu trữ thời gian nhập viện trễ trung bình cho mỗi bệnh viện. Bạn sẽ sử dụng “double” và đặt độ dài là số đầu ra dự kiến (số bệnh viện duy nhất trong data set). # import the linelist
linelist <- import("linelist_cleaned.rds")
5 Data frame trống Bạn có thể tạo một data frame trống bằng cách chỉ định số hàng và cột như sau: Danh sách trống Bạn có thể muốn lưu trữ một số biểu đồ được tạo bởi vòng lặp for trong danh sách. Một danh sách giống như vector, nhưng chứa các đối tượng R khác bên trong nó có thể thuộc các lớp khác nhau. Các phần tử trong danh sách có thể là một số, một dataframe, một vector và thậm chí là một danh sách khác. Bạn thực sự khởi tạo một danh sách trống bằng cách sử dụng cùng một lệnh # import the linelist
linelist <- import("linelist_cleaned.rds")
04 như trên, nhưng với # import the linelist
linelist <- import("linelist_cleaned.rds")
11. Chỉ định độ dài như bạn muốn. # import the linelist
linelist <- import("linelist_cleaned.rds")
6 InLưu ý rằng để in từ bên trong vòng lặp for, bạn có thể sẽ cần phải đưa hàm # import the linelist
linelist <- import("linelist_cleaned.rds")
12 vào. Trong ví dụ dưới đây, chuỗi là một vector ký tự rõ ràng, được sử dụng để đặt linelist con theo bệnh viện. Kết quả không được lưu trữ trong vùng chứa mà được in ra console với hàm # import the linelist
linelist <- import("linelist_cleaned.rds")
12. # import the linelist
linelist <- import("linelist_cleaned.rds")
7 # import the linelist
linelist <- import("linelist_cleaned.rds")
8 Kiểm tra vòng lặp forĐể kiểm tra vòng lặp của mình, bạn có thể chạy lệnh để gán tạm thời “item”, chẳng hạn như # import the linelist
linelist <- import("linelist_cleaned.rds")
14 hoặc # import the linelist
linelist <- import("linelist_cleaned.rds")
15. Thực hiện việc này bên ngoài vòng lặp và sau đó chỉ chạy code thao tác của bạn (code trong dấu ngoặc nhọn) để xem liệu kết quả mong đợi có được tạo ra hay không. Lặp lại biểu đồĐể đặt tất cả ba thành phần lại với nhau (vùng chứa, trình tự và thao tác), chúng ta hãy cố gắng vẽ biểu đồ đường cong dịch bệnh cho mỗi bệnh viện (xem chương ). Chúng tôi có thể tạo ra một đường cong dịch bệnh đẹp về tất cả các trường hợp theo giới tính bằng cách sử dụng package incidence2 như bên dưới: # import the linelist
linelist <- import("linelist_cleaned.rds")
9 Để tạo ra một biểu đồ riêng cho từng trường hợp của bệnh viện, chúng ta có thể đặt code đường cong dịch bệnh này trong vòng lặp for. Đầu tiên, chúng tôi lưu một vector được đặt tên duy nhất của các tên bệnh viện, # a 'for loop' with character sequence
for (hosp in hospital_names){ # sequence # OPERATIONS HERE
}
2. Vòng lặp for sẽ chạy một lần cho mỗi tên sau: # import the linelist
linelist <- import("linelist_cleaned.rds")
17. Mỗi lần lặp lại của vòng lặp for, tên bệnh viện hiện tại từ vector sẽ được biểu diễn dưới dạng # a 'for loop' with character sequence
for (hosp in hospital_names){ # sequence # OPERATIONS HERE
}
1 để sử dụng trong vòng lặp. Trong các thao tác vòng lặp, bạn có thể viết code R như bình thường, nhưng cần biết rằng giá trị của “item” ( # a 'for loop' with character sequence
for (hosp in hospital_names){ # sequence # OPERATIONS HERE
}
1 trong trường hợp này) sẽ thay đổi. Trong vòng lặp này: for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}"
0 Theo dõi tiến trình của một vòng lặpMột vòng lặp có nhiều lần lặp có thể chạy trong nhiều phút hoặc thậm chí hàng giờ. Do đó, có thể hữu ích khi in tiến trình ra R console. Câu lệnh # import the linelist
linelist <- import("linelist_cleaned.rds")
26 dưới đây có thể được đặt trong các thao tác vòng lặp để in mỗi số thứ 100. Chỉ cần điều chỉnh nó để `for (col in names(linelist)){ # loop runs for each column in linelist; column name represented by "col" Example operations code - print number of missing values in column print(sum(is.na(linelist[[col]]))) # linelist is indexed by current value of "col"
}` 6 là “item” trong vòng lặp của bạn. for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}"
1 purrr và các danh sáchMột cách tiếp cận khác đối với các thao tác lặp là package purrr - nó là phương pháp tidyverse để lặp lại. Nếu bạn phải thực hiện cùng một tác vụ nhiều lần, có lẽ bạn nên tạo một giải pháp tổng thể có thể sử dụng trên nhiều đầu vào. Ví dụ: tạo các biểu đồ cho nhiều khu vực pháp lý, hoặc nhập và kết hợp nhiều tệp. Ngoài ra còn có một số lợi thế khác đối với purrr - bạn có thể sử dụng nó với các pipes # import the linelist
linelist <- import("linelist_cleaned.rds")
28, nó xử lý lỗi tốt hơn vòng lặp for bình thường, và có cú pháp khá rõ ràng và đơn giản! Nếu bạn đang sử dụng vòng lặp for, bạn có thể tạo vòng lặp rõ ràng và ngắn gọn hơn với purrr! Hãy nhớ rằng purrr là một công cụ lập trình theo hàm. Có nghĩa là, các thao tác lặp đi lặp lại được gói gọn trong các hàm. Xem chương để tìm hiểu cách viết hàm của riêng bạn. purrr cũng gần như hoàn toàn dựa trên danh sách và vectors - vì vậy hãy nghĩ về nó như là áp dụng một hàm cho mỗi phần tử của danh sách/vector đó! Tải packagespurrr là một phần của tidyverse, vì vậy không cần cài đặt/tải một package riêng biệt. for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}"
2 # import the linelist
linelist <- import("linelist_cleaned.rds")
29 Một hàm cốt lõi của purrr là # import the linelist
linelist <- import("linelist_cleaned.rds")
29, hàm này “maps” (áp dụng) một hàm cho từng phần tử đầu vào của danh sách/vector bạn cung cấp. Cú pháp cơ bản là # import the linelist
linelist <- import("linelist_cleaned.rds")
31. Chi tiết hơn như sau: import the linelist
linelist <- import("linelist_cleaned.rds") 32 là các đầu vào mà hàm import the linelist
linelist <- import("linelist_cleaned.rds")
33 sẽ được áp dụng lặp đi lặp lại - ví dụ: vector của tên các khu vực pháp lý, các cột trong data frame hoặc danh sách các data frameimport the linelist
linelist <- import("linelist_cleaned.rds") 34 là hàm áp dụng cho từng phần tử của đầu vào import the linelist
linelist <- import("linelist_cleaned.rds") 35 - nó có thể là một hàm như import the linelist
linelist <- import("linelist_cleaned.rds") 12 đã tồn tại hoặc một hàm tùy chỉnh mà bạn xác định. Hàm thường được viết sau dấu ngã import the linelist
linelist <- import("linelist_cleaned.rds")
37 (chi tiết bên dưới).
Thêm một số lưu ý về cú pháp: - Nếu hàm không cần chỉ định thêm đối số, nó có thể được viết không có dấu ngoặc đơn và không có dấu ngã (ví dụ:
import the linelist
linelist <- import("linelist_cleaned.rds") 38). Để cung cấp các đối số sẽ có cùng giá trị cho mỗi lần lặp, hãy cung cấp chúng trong import the linelist
linelist <- import("linelist_cleaned.rds") 29 nhưng bên ngoài đối số import the linelist
linelist <- import("linelist_cleaned.rds") 34, chẳng hạn như import the linelist
linelist <- import("linelist_cleaned.rds") 41 trong import the linelist
linelist <- import("linelist_cleaned.rds")
42. - Bạn có thể sử dụng
import the linelist
linelist <- import("linelist_cleaned.rds") 35 (hoặc đơn giản là import the linelist
linelist <- import("linelist_cleaned.rds") - bên trong hàm
import the linelist
linelist <- import("linelist_cleaned.rds") 34 làm trình giữ chỗ cho giá trị import the linelist
linelist <- import("linelist_cleaned.rds")
35 của lần lặp đó - Sử dụng cú pháp dấu ngã (
import the linelist
linelist <- import("linelist_cleaned.rds") - để kiểm soát hàm nhiều hơn - viết hàm như bình thường với dấu ngoặc đơn, chẳng hạn như:
import the linelist
linelist <- import("linelist_cleaned.rds") 48. Sử dụng cú pháp này đặc biệt nếu giá trị của một đối số sẽ thay đổi mỗi lần lặp lại hoặc nếu nó là chính giá trị import the linelist
linelist <- import("linelist_cleaned.rds")
35 (xem ví dụ bên dưới)
** Đầu ra của việc sử dụng # import the linelist
linelist <- import("linelist_cleaned.rds")
29 là một danh sách** - một danh sách là một lớp đối tượng giống như một vector nhưng các phần tử của nó có thể thuộc các lớp khác nhau. Vì vậy, một danh sách được tạo bởi # import the linelist
linelist <- import("linelist_cleaned.rds")
29 có thể chứa nhiều data frames, hoặc nhiều vector, nhiều giá trị đơn lẻ, hoặc thậm chí nhiều danh sách! Có các phiên bản thay thế của # import the linelist
linelist <- import("linelist_cleaned.rds")
29 được giải thích bên dưới, tạo ra các loại kết quả khác (ví dụ: # import the linelist
linelist <- import("linelist_cleaned.rds")
53 để tạo data frame, # import the linelist
linelist <- import("linelist_cleaned.rds")
54 để tạo vectors ký tự và # import the linelist
linelist <- import("linelist_cleaned.rds")
55 để tạo vectors số). Ví dụ - nhập và kết hợp các trang tính ExcelHãy biểu diễn với một công việc thường gặp của nhà dịch tễ học: - Bạn muốn nhập một Excel workbook với dữ liệu trường hợp bệnh, nhưng dữ liệu được chia thành các trang tính có tên khác nhau trong workbook. Làm cách nào để bạn nhập và kết hợp các trang tính vào một data frame một cách hiệu quả? Giả sử chúng tôi được gửi Excel workbook bên dưới. Mỗi trang tính chứa các trường hợp từ một bệnh viện nhất định. Đây là một cách tiếp cận sử dụng # import the linelist
linelist <- import("linelist_cleaned.rds")
29: import the linelist
linelist <- import("linelist_cleaned.rds") 29 hàm
[1] "Other" "Missing" "St. Mark's Maternity Hospital (SMMH)"
[4] "Port Hospital" "Military Hospital" "Central Hospital"
8 để nó chạy qua mỗi trang tính Excel- Kết hợp các data frames đã nhập thành một bằng cách sử dụng
import the linelist
linelist <- import("linelist_cleaned.rds")
59 - Trong khi đó, hãy giữ nguyên tên trang tính ban đầu cho mỗi hàng, lưu trữ thông tin này trong một cột mới trong data frame cuối cùng
Đầu tiên, chúng ta cần trích xuất tên trang tính và lưu chúng. Chúng tôi cung cấp đường dẫn tệp của Excel workbook tới hàm # import the linelist
linelist <- import("linelist_cleaned.rds")
60 từ package readxl, sẽ trích xuất tên trang tính. Chúng tôi lưu trữ chúng trong một vector ký tự được gọi là # import the linelist
linelist <- import("linelist_cleaned.rds")
61. for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}"
3 Đây là các tên trang tính: for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}"
4 Bây giờ chúng ta có tên của vector này, # import the linelist
linelist <- import("linelist_cleaned.rds")
29 có thể cung cấp từng cái một cho hàm
## [1] "Other" "Missing" "St. Mark's Maternity Hospital (SMMH)"
## [4] "Port Hospital" "Military Hospital" "Central Hospital"
8. Trong ví dụ này, # import the linelist
linelist <- import("linelist_cleaned.rds")
61 là # import the linelist
linelist <- import("linelist_cleaned.rds")
35 và
## [1] "Other" "Missing" "St. Mark's Maternity Hospital (SMMH)"
## [4] "Port Hospital" "Military Hospital" "Central Hospital"
8 là hàm # import the linelist
linelist <- import("linelist_cleaned.rds")
33. Nhớ lại từ chương [Nhập và xuất dữ liệu], khi sử dụng trên Excel workbooks,
## [1] "Other" "Missing" "St. Mark's Maternity Hospital (SMMH)"
## [4] "Port Hospital" "Military Hospital" "Central Hospital"
8 có thể chấp nhận đối số # import the linelist
linelist <- import("linelist_cleaned.rds")
69 để chỉ định trang tính để nhập. Trong hàm
## [1] "Other" "Missing" "St. Mark's Maternity Hospital (SMMH)"
## [4] "Port Hospital" "Military Hospital" "Central Hospital"
8 của # import the linelist
linelist <- import("linelist_cleaned.rds")
33, chúng tôi cung cấp # import the linelist
linelist <- import("linelist_cleaned.rds")
72, giá trị của nó sẽ thay đổi theo mỗi lần lặp thông qua vector # import the linelist
linelist <- import("linelist_cleaned.rds")
61 - đầu tiên là “Central Hospital”, sau đó là “Military Hospital”, v.v. Lưu ý - bởi vì chúng tôi đã sử dụng # import the linelist
linelist <- import("linelist_cleaned.rds")
29, dữ liệu trong mỗi trang tính Excel sẽ được lưu thành một data frame riêng biệt trong danh sách. Chúng tôi muốn mỗi phần tử danh sách này (data frames) có một tên, vì vậy trước khi chuyển # import the linelist
linelist <- import("linelist_cleaned.rds")
61 đến # import the linelist
linelist <- import("linelist_cleaned.rds")
29, chúng tôi chuyển nó qua # import the linelist
linelist <- import("linelist_cleaned.rds")
77 từ purrr, điều này đảm bảo rằng mỗi phần tử danh sách nhận được tên thích hợp. Chúng tôi lưu danh sách đầu ra dưới dạng # import the linelist
linelist <- import("linelist_cleaned.rds")
78. for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}"
5 Khi kiểm tra đầu ra, chúng ta thấy rằng dữ liệu từ mỗi trang tính Excel được lưu trong danh sách với một tên. Điều này là tốt, nhưng chúng ta chưa kết thúc ở đây. Cuối cùng, chúng tôi sử dụng hàm # import the linelist
linelist <- import("linelist_cleaned.rds")
59 (từ dplyr) chấp nhận danh sách các data frames có cấu trúc tương tự và kết hợp chúng thành một data frame. Để tạo một cột mới từ phần tử danh sách tên, chúng tôi sử dụng đối số # import the linelist
linelist <- import("linelist_cleaned.rds")
80 và cung cấp cho nó tên mong muốn cho cột mới. Dưới đây là toàn bộ chuỗi lệnh: for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}"
6 Và bây giờ chúng ta có một data frame với một cột chứa trang tính ban đầu! Có những biến thể của # import the linelist
linelist <- import("linelist_cleaned.rds")
29 mà bạn nên biết. Ví dụ: # import the linelist
linelist <- import("linelist_cleaned.rds")
53 trả về data frame, không phải danh sách. Vì vậy, chúng ta có thể đã sử dụng nó cho tác vụ ở trên và không cần phải ràng buộc các hàng. Nhưng sau đó chúng ta sẽ không thể nắm bắt được trường hợp nào đến từ trang tính nào (bệnh viện). Các biến thể khác bao gồm # import the linelist
linelist <- import("linelist_cleaned.rds")
54, # import the linelist
linelist <- import("linelist_cleaned.rds")
55. Đây là những hàm rất hữu ích vì hai lý do. Trước hết, chúng tự động chuyển đổi đầu ra của một hàm lặp thành một vector (không phải danh sách). Thứ hai, chúng có thể kiểm soát rõ ràng lớp mà dữ liệu quay trở lại - bạn đảm bảo rằng dữ liệu của bạn quay trở lại dưới dạng vector ký tự với # import the linelist
linelist <- import("linelist_cleaned.rds")
54, hoặc vector số với # import the linelist
linelist <- import("linelist_cleaned.rds")
55. Hãy quay lại những hàm này sau trong phần sau! Các hàm # import the linelist
linelist <- import("linelist_cleaned.rds")
87 và # import the linelist
linelist <- import("linelist_cleaned.rds")
88 cũng rất hữu ích để lặp lại - chúng cho phép bạn chỉ định phần tử nào của danh sách nên lặp lại! Chúng hoạt động đơn giản bằng cách áp dụng một vector gồm các chỉ mục/tên (với # import the linelist
linelist <- import("linelist_cleaned.rds")
- hoặc một phép kiểm tra logic (với
# import the linelist
linelist <- import("linelist_cleaned.rds")
88). Ví dụ, chúng tôi không muốn đọc trang tính đầu tiên chứa dữ liệu của bệnh viện. Chúng tôi sử dụng # import the linelist
linelist <- import("linelist_cleaned.rds")
87 thay vì # import the linelist
linelist <- import("linelist_cleaned.rds")
29 và chỉ định đối số # import the linelist
linelist <- import("linelist_cleaned.rds")
93 thành # import the linelist
linelist <- import("linelist_cleaned.rds")
94 có nghĩa là không sử dụng phần tử đầu tiên của # import the linelist
linelist <- import("linelist_cleaned.rds")
35. Ngoài ra, bạn có thể cung cấp một vector gồm các số dương hoặc tên cho # import the linelist
linelist <- import("linelist_cleaned.rds")
93 để chỉ định phần tử nào sẽ sử dụng. for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}"
7 Lưu ý rằng tên trang tính đầu tiên sẽ vẫn xuất hiện như một phần tử của danh sách đầu ra - nhưng nó chỉ là một tên ký tự đơn lẻ (không phải là một data frame). Bạn sẽ cần phải loại bỏ phần tử này trước khi liên kết các hàng. Chúng tôi sẽ trình bày cách xóa và sửa đổi các phần tử danh sách trong phần sau. Tách và xuất bộ dữ liệuDưới đây, chúng tôi đưa ra một ví dụ về cách tách bộ dữ liệu thành các phần và sau đó sử dụng phép lặp # import the linelist
linelist <- import("linelist_cleaned.rds")
29 để xuất từng phần dưới dạng trang tính Excel riêng biệt hoặc dưới dạng tệp CSV riêng biệt. Tách bộ dữ liệuGiả sử chúng ta có toàn bộ trường hợp # a 'for loop' with character sequence
for (hosp in hospital_names){ # sequence # OPERATIONS HERE
}
7 làm data frame và bây giờ chúng ta muốn tạo một linelist riêng biệt cho từng bệnh viện và xuất từng trường hợp dưới dạng tệp CSV riêng biệt. Dưới đây, chúng tôi thực hiện các bước sau: Sử dụng # import the linelist
linelist <- import("linelist_cleaned.rds")
99 (từ dplyr) để tách data frame # a 'for loop' with character sequence
for (hosp in hospital_names){ # sequence # OPERATIONS HERE
}
7 theo các giá trị duy nhất trong cột # import the linelist
linelist <- import("linelist_cleaned.rds")
22. Đầu ra là một danh sách chứa một data frame cho mỗi tập hợp con của bệnh viện. for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}"
8 Chúng ta có thể chạy for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}"
02 và thấy rằng danh sách này chứa 6 data frames (“tibbles”), mỗi khung đại diện cho các trường hợp từ một bệnh viện. Tuy nhiên, lưu ý rằng các data frames trong danh sách không có tên theo mặc định! Chúng tôi muốn mỗi người có một tên và sau đó sử dụng tên đó khi lưu tệp CSV. Một cách tiếp cận để trích xuất các tên là sử dụng for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}"
03 (từ dplyr) để trích xuất cột # import the linelist
linelist <- import("linelist_cleaned.rds")
22 từ mỗi data frame trong danh sách. Sau đó, để an toàn, chúng tôi chuyển đổi các giá trị thành ký tự và sau đó sử dụng for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}"
05 để lấy tên cho data frame cụ thể đó. Tất cả các bước này được áp dụng cho từng data frame thông qua # import the linelist
linelist <- import("linelist_cleaned.rds")
29. for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}"
9 Bây giờ chúng ta có thể thấy rằng mỗi phần tử trong danh sách đều có một tên. Những tên này có thể được truy cập thông qua for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}"
07.
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
0 Nhiều hơn một cột# import the linelist
linelist <- import("linelist_cleaned.rds")
99 Nếu bạn muốn chia linelist theo nhiều hơn một nhóm cột, chẳng hạn như để tạo tập hợp con linelist theo giao điểm của bệnh viện VÀ giới tính, bạn sẽ cần một cách tiếp cận khác để đặt tên cho các phần tử danh sách. Điều này liên quan đến việc thu thập các “nhóm chính (group keys)” duy nhất bằng cách sử dụng for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}"
09 từ dplyr - chúng được trả về dưới dạng một data frame. Sau đó, bạn có thể kết hợp các nhóm chính thành các giá trị với for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}"
10 như được hiển thị bên dưới và gán các tên tập nhóm này cho for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}"
11.
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
1
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
2 Bây giờ chúng ta kết hợp các nhóm với nhau, được phân tách bằng dấu gạch ngang và gán chúng làm tên của các phần tử danh sách trong for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}"
11. Thao tác này sẽ mất thêm vài dòng khi chúng ta thay thế for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}"
13 bằng “Missing”, sử dụng for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}"
10 từ dplyr để kết hợp các giá trị cột với nhau (phân tách bằng dấu gạch ngang), sau đó chuyển đổi thành vector không tên để nó có thể được dùng làm tên của for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}"
11.
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
3 Xuất dưới dạng trang tính ExcelĐể xuất linelists bệnh viện dưới dạng Excel workbook với một linelist trên mỗi trang tính, chúng tôi chỉ có thể cung cấp danh sách có tên for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}"
11 cho hàm for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}"
17 từ package writexl. Điều này có khả năng lưu một Excel workbook với nhiều trang tính. Tên phần tử danh sách được tự động áp dụng làm tên trang tính.
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
4 Bây giờ bạn có thể mở tệp Excel và thấy rằng mỗi bệnh viện có một trang tính riêng. Xuất dưới dạng tệp CSVĐây là lệnh phức tạp hơn một chút, nhưng bạn cũng có thể xuất từng linelist dành riêng cho bệnh viện dưới dạng tệp CSV riêng biệt, với tên tệp dành riêng cho bệnh viện. Một lần nữa, chúng tôi sử dụng # import the linelist
linelist <- import("linelist_cleaned.rds")
29: chúng tôi lấy vector của tên phần tử danh sách (được hiển thị ở trên) và sử dụng # import the linelist
linelist <- import("linelist_cleaned.rds")
29 để lặp lại chúng, áp dụng for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}"
20 (từ package rio, xem chương [Nhập và xuất dữ liệu]) trên data frame với danh sách for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}"
11 có tên đó. Chúng tôi cũng sử dụng tên để tạo một tên tệp duy nhất. Đây là các bước thực hiện: - Chúng ta bắt đầu với vector tên kí tự, được chuyển tới
import the linelist
linelist <- import("linelist_cleaned.rds") 29 dưới dạng import the linelist
linelist <- import("linelist_cleaned.rds")
35 - Hàm
import the linelist
linelist <- import("linelist_cleaned.rds") 33 là for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}"
20, hàm này yêu cầu một data frame và một đường dẫn tệp để ghi vào - Đầu vào
import the linelist
linelist <- import("linelist_cleaned.rds") 35 (tên bệnh viện) được sử dụng trong import the linelist
linelist <- import("linelist_cleaned.rds") 33 để trích xuất/lập chỉ mục phần tử cụ thể đó của danh sách for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}" 11. Điều này làm cho mỗi lần chỉ một data frame được cung cấp cho for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}"
20. - Ví dụ: khi
import the linelist
linelist <- import("linelist_cleaned.rds") 29 lặp lại cho “Military Hospital”, thì for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}" 31 sẽ là for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}" 32, do đó trả về phần tử thứ hai của for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}"
11 - đó là tất cả các trường hợp từ Military Hospital. - Đường dẫn tệp được cung cấp cho
for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}" 20 là động thông qua việc sử dụng for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}" 35 (xem chương ): - Sau đó là dấu gạch chéo
for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}" 38, rồi lại import the linelist
linelist <- import("linelist_cleaned.rds")
35 in tên bệnh viện hiện tại để làm cho tệp có thể nhận dạng được - Cuối cùng là phần mở rộng “.csv” mà
for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}"
20 sử dụng để tạo tệp CSV
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
5 Bây giờ bạn có thể thấy rằng mỗi tệp được lưu trong thư mục “data” của Dự án R “Epi_R_handbook”! Hàm tùy chỉnhBạn có thể muốn tạo một hàm của riêng mình để đưa vào # import the linelist
linelist <- import("linelist_cleaned.rds")
29. Giả sử chúng ta muốn tạo đường cong dịch bệnh cho từng trường hợp của bệnh viện. Để thực hiện việc này với purrr, hàm # import the linelist
linelist <- import("linelist_cleaned.rds")
33 của chúng ta có thể là for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}"
43 và các phần mở rộng bằng for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}"
44 như bình thường. Vì đầu ra của # import the linelist
linelist <- import("linelist_cleaned.rds")
29 luôn là một danh sách nên các biểu đồ được lưu trữ trong một danh sách. Bởi vì chúng là các biểu đồ, chúng có thể được trích xuất và vẽ bằng hàm for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}"
46 từ package ggpubr (documentation).
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
6 Nếu code # import the linelist
linelist <- import("linelist_cleaned.rds")
29 này trông quá lộn xộn, bạn có thể đạt được kết quả tương tự bằng cách lưu lệnh for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}"
43 cụ thể của mình dưới dạng một hàm tùy chỉnh do người dùng xác định, ví dụ, chúng ta có thể đặt tên nó là for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}"
49. Hàm này sau đó được sử dụng trong # import the linelist
linelist <- import("linelist_cleaned.rds")
29. # import the linelist
linelist <- import("linelist_cleaned.rds")
35 sẽ được thay thế lặp lại bằng tên bệnh viện và được sử dụng làm for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}"
52 trong hàm for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}"
49. Xem chương về .
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
7
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
8 Áp dụng một hàm qua nhiều cộtMột trường hợp sử dụng phổ biến khác là áp dụng một hàm trên nhiều cột. Dưới đây, chúng tôi # import the linelist
linelist <- import("linelist_cleaned.rds")
29 hàm for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}"
55 qua các cột số trong data frame # a 'for loop' with character sequence
for (hosp in hospital_names){ # sequence # OPERATIONS HERE
}
7, so sánh các giá trị số theo giới tính. Nhớ lại từ chương về rằng for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}"
55 có thể nhận đầu vào ở định dạng công thức, chẳng hạn như for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}"
58. Trong ví dụ này, chúng tôi làm như sau: # import the linelist
linelist <- import("linelist_cleaned.rds")
29 trả về một danh sách, vì vậy đầu ra là một danh sách các kết quả t-test - một danh sách phần tử cho mỗi cột số được phân tích.
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
9 Đây là danh sách for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}"
76 trông như thế nào khi được mở (Cửa sổ Viewer) trong RStudio. Chúng tôi đã đánh dấu các phần quan trọng đối với các ví dụ trong trang này. - Ở trên cùng, bạn có thể thấy toàn bộ danh sách được đặt tên là
for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}" 76 và có năm phần tử. Năm phần tử đó được đặt tên là import the linelist
linelist <- import("linelist_cleaned.rds") 01, for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}" 79, for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}" 80, for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}" 81, for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}" 82 theo mỗi biến được sử dụng trong t-test với import the linelist
linelist <- import("linelist_cleaned.rds") 00 từ a 'for loop' with character sequence
for (hosp in hospital_names){ # sequence # OPERATIONS HERE
}
7. - Mỗi phần tử trong số năm phần tử đó đều là danh sách, với các phần tử bên trong chúng, chẳng hạn như
for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}" 85 và for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}" 86. Một số phần tử như for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}" 85 là các số đơn lẻ, trong khi một số phần tử như for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}" 88 bao gồm hai hoặc nhiều phần tử ( for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}" 89 và for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}"
90).
Lưu ý: Hãy nhớ rằng nếu bạn chỉ muốn áp dụng một hàm cho một số cột nhất định trong data frame, bạn cũng có thể chỉ cần sử dụng for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}"
91 và for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}"
92, như được giải thích trong chương . Dưới đây là một ví dụ về việc áp dụng for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}"
93 cho chỉ các cột “age”. Lưu ý vị trí của dấu ngoặc đơn và dấu phẩy. # There is no "container" in this example
0 Trích xuất từ danh sáchKhi # import the linelist
linelist <- import("linelist_cleaned.rds")
29 tạo ra một đầu ra của lớp danh sách, chúng ta sẽ dành một chút thời gian thảo luận về cách trích xuất dữ liệu từ danh sách bằng cách sử dụng các hàm purrr đi kèm. Để minh họa điều này, chúng tôi sẽ sử dụng danh sách for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}"
76 từ phần trước. Đây là danh sách gồm 5 danh sách - mỗi danh sách trong số 5 danh sách chứa kết quả của t-test giữa một cột từ data frame # a 'for loop' with character sequence
for (hosp in hospital_names){ # sequence # OPERATIONS HERE
}
7 và cột nhị phân # import the linelist
linelist <- import("linelist_cleaned.rds")
00 của nó. Xem hình ảnh trong phần trên để có hình ảnh về cấu trúc danh sách. Tên của các phần tửĐể trích xuất tên của chính các phần tử, chỉ cần sử dụng # a 'for loop' with character sequence
for (hosp in hospital_names){ # sequence # OPERATIONS HERE
}
6 từ base R. Trong trường hợp này, chúng tôi sử dụng # a 'for loop' with character sequence
for (hosp in hospital_names){ # sequence # OPERATIONS HERE
}
6 trên for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}"
76 để trả về tên của mỗi danh sách con, là tên của 5 biến đã thực hiện t-tests. # There is no "container" in this example
1 Các phần tử theo tên hoặc vị tríĐể trích xuất các phần tử danh sách theo tên hoặc theo vị trí, bạn có thể sử dụng dấu ngoặc
## [1] 0
## [1] 0
## [1] 2087
## [1] 256
## [1] 0
## [1] 936
## [1] 1323
## [1] 278
## [1] 86
## [1] 0
## [1] 86
## [1] 86
## [1] 86
## [1] 0
## [1] 0
## [1] 0
## [1] 2088
## [1] 2088
## [1] 0
## [1] 0
## [1] 0
## [1] 249
## [1] 249
## [1] 249
## [1] 249
## [1] 249
## [1] 149
## [1] 765
## [1] 0
## [1] 256
8 như được mô tả trong chương . Dưới đây chúng tôi sử dụng dấu ngoặc kép để lập chỉ mục danh sách
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
02 và hiển thị phần tử đầu tiên là kết quả của t-test trên # import the linelist
linelist <- import("linelist_cleaned.rds")
01. # There is no "container" in this example
2 # There is no "container" in this example
3 # There is no "container" in this example
4 # There is no "container" in this example
5 Tuy nhiên, dưới đây chúng tôi sẽ trình bày việc sử dụng các hàm # import the linelist
linelist <- import("linelist_cleaned.rds")
29 và
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
05 của purrr đơn giản và linh hoạt để đạt được kết quả tương tự. ## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
05
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
05 kéo ra các phần tử theo tên hoặc theo vị trí. Ví dụ - để trích xuất kết quả t-test cho độ tuổi, bạn có thể sử dụng
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
05 như thế này: # There is no "container" in this example
6 # There is no "container" in this example
3 Lập chỉ mục các cấp độ sâu hơn bằng cách chỉ định các cấp độ cao hơn bằng dấu phẩy. Dưới đây trích xuất phần tử có tên “p.value” từ danh sách # import the linelist
linelist <- import("linelist_cleaned.rds")
01 trong danh sách for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}"
76. Bạn cũng có thể sử dụng số thay vì tên ký tự. # There is no "container" in this example
8 # There is no "container" in this example
9 Bạn có thể trích xuất các phần tử bên trong như vậy từ tất cả các phần tử cấp một bằng cách sử dụng # import the linelist
linelist <- import("linelist_cleaned.rds")
29 để chạy hàm
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
05 trên từng phần tử cấp một. Ví dụ, đoạn mã dưới đây trích xuất các phần tử “p.value” từ tất cả các danh sách trong for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}"
76. Danh sách các kết quả t-test là # import the linelist
linelist <- import("linelist_cleaned.rds")
35 được lặp qua,
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
05 là hàm # import the linelist
linelist <- import("linelist_cleaned.rds")
33 đang được lặp và giá trị “p-value” được cung cấp cho hàm. # make vector of the hospital names
hospital_names <- unique(linelist$hospital)
hospital_names # print
0 # make vector of the hospital names
hospital_names <- unique(linelist$hospital)
hospital_names # print
1 Một cách thay thế khác là # import the linelist
linelist <- import("linelist_cleaned.rds")
29 viết tắt tên phần tử trong dấu ngoặc kép và nó sẽ ngắt nó ra. Nếu bạn sử dụng # import the linelist
linelist <- import("linelist_cleaned.rds")
29, đầu ra sẽ là một danh sách, trong khi nếu bạn sử dụng # import the linelist
linelist <- import("linelist_cleaned.rds")
54 thì nó sẽ là một vectơ ký tự được đặt tên và nếu bạn sử dụng # import the linelist
linelist <- import("linelist_cleaned.rds")
55 nó sẽ là một vector số được đặt tên. # make vector of the hospital names
hospital_names <- unique(linelist$hospital)
hospital_names # print
2 # make vector of the hospital names
hospital_names <- unique(linelist$hospital)
hospital_names # print
3 Bạn có thể đọc thêm về
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
05 trong tài liệu về purrr. Nó có một hàm tương tự là
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
22 sẽ trả về lỗi thay vì NULL nếu một phần tử không tồn tại. Chuyển đổi danh sách thành data frameĐây là một nội dung phức tạp - hãy xem phần Tài nguyên học liệu để có các hướng dẫn đầy đủ hơn. Tuy nhiên, chúng tôi sẽ minh họa việc chuyển đổi danh sách các kết quả t-test thành một data frame. Chúng tôi sẽ tạo một data frame với các cột cho biến, p-value của nó và giá trị trung bình từ hai nhóm (nam và nữ). Dưới đây là một số phương pháp và hàm mới sẽ được sử dụng: - Hàm
[1] 3
[1] 4
[1] 5
[1] 6
[1] 7
23 sẽ được sử dụng để tạo một tibble (giống như một data frame) - Chúng tôi bao quanh hàm
[1] 3
[1] 4
[1] 5
[1] 6
[1] 7
23 bằng dấu ngoặc nhọn
[1] 3
[1] 4
[1] 5
[1] 6
[1] 7
25 để ngăn toàn bộ for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{" [print](https://rdrr.io/r/base/print.html)(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}"
76 được lưu trữ dưới dạng cột nhỏ đầu tiên
- Trong
[1] 3
[1] 4
[1] 5
[1] 6
[1] 7
23, mỗi cột được tạo một cách rõ ràng, tương tự như cú pháp của for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}" 91:
# make vector of the hospital names
hospital_names <- unique(linelist$hospital)
hospital_names # print
4 # make vector of the hospital names
hospital_names <- unique(linelist$hospital)
hospital_names # print
5 Nhưng bây giờ hãy thêm các cột chứa trung bình cho mỗi nhóm (nam và nữ). Chúng tôi sẽ cần trích xuất phần tử for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}"
88, nhưng điều này thực sự chứa hai phần tử bên trong nó ( for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}"
89 và for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}"
90). Vì vậy, nó không thể được đơn giản hóa thành một vector với # import the linelist
linelist <- import("linelist_cleaned.rds")
54 hoặc # import the linelist
linelist <- import("linelist_cleaned.rds")
55. Thay vào đó, chúng tôi sử dụng # import the linelist
linelist <- import("linelist_cleaned.rds")
29, được sử dụng trong
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
23, sẽ tạo một cột lớp danh sách trong tibble! Vâng, điều này là có thể! # make vector of the hospital names
hospital_names <- unique(linelist$hospital)
hospital_names # print
6 # make vector of the hospital names
hospital_names <- unique(linelist$hospital)
hospital_names # print
7 Sau khi bạn có cột danh sách này, có một số hàm tidyr (một phần của tidyverse) giúp bạn “gỡ rối” hoặc “gỡ bỏ” các cột “danh sách lồng nhau” này. Đọc thêm về chúng tại đây hoặc bằng cách chạy
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
41. Tóm lại:
[1] 3
[1] 4
[1] 5
[1] 6
[1] 7
42 - đưa mỗi phần tử của mỗi danh sách cột một cột riêng của nó
[1] 3
[1] 4
[1] 5
[1] 6
[1] 7
43 - đưa mỗi phần tử của mỗi danh sách cột một hàng riêng của nó
[1] 3
[1] 4
[1] 5
[1] 6
[1] 7
44 - hoạt động giống như
[1] 3
[1] 4
[1] 5
[1] 6
[1] 7
42 nhưng bạn chỉ định phần tử nào cần gỡ bỏ
Dưới đây, chúng tôi chuyển tibble sang
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
42 để chỉ định cột
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
47 của tibble (là một danh sách lồng nhau). Kết quả là
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
47 được thay thế bằng hai cột mới, mỗi cột phản ánh hai phần tử trước đó trong mỗi ô
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
47. # make vector of the hospital names
hospital_names <- unique(linelist$hospital)
hospital_names # print
8 # make vector of the hospital names
hospital_names <- unique(linelist$hospital)
hospital_names # print
9 Loại bỏ, giữ lại và thu gọn danh sáchVì làm việc với purrr nên thường liên quan đến danh sách, chúng ta sẽ khám phá ngắn gọn một số hàm purrr để sửa đổi danh sách. Xem phần Tài nguyên học liệu để có hướng dẫn đầy đủ hơn về các hàm purrr.
[1] 3
[1] 4
[1] 5
[1] 6
[1] 7
50 có nhiều cách sử dụng, một trong số đó có thể là xóa một phần tử danh sách
[1] 3
[1] 4
[1] 5
[1] 6
[1] 7
51 giữ lại các phần tử được chỉ định cho
[1] 3
[1] 4
[1] 5
[1] 6
[1] 7
52 hoặc trong đó một hàm được cung cấp cho
[1] 3
[1] 4
[1] 5
[1] 6
[1] 7
52 đánh giá là TRUE
[1] 3
[1] 4
[1] 5
[1] 6
[1] 7
54 loại bỏ các phần tử được chỉ định cho
[1] 3
[1] 4
[1] 5
[1] 6
[1] 7
55 hoặc trong đó một hàm được cung cấp cho
[1] 3
[1] 4
[1] 5
[1] 6
[1] 7
52 đánh giá là TRUE
[1] 3
[1] 4
[1] 5
[1] 6
[1] 7
57 loại bỏ tất cả các phần tử trống
Dưới đây là một số ví dụ sử dụng danh sách # import the linelist
linelist <- import("linelist_cleaned.rds")
78 được tạo trong phần trên về (nó chứa 6 trường hợp linelist thuộc data frames): Các phần tử có thể được xóa bằng tên với
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
50 và đặt tên bằng
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
60.
## [1] "Other" "Missing" "St. Mark's Maternity Hospital (SMMH)"
## [4] "Port Hospital" "Military Hospital" "Central Hospital"
0 Bạn cũng có thể loại bỏ các phần tử theo tiêu chí, bằng cách cung cấp phương trình “định trước” cho
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
52 (một phương trình đánh giá là TRUE hoặc FALSE). Đặt dấu ngã # import the linelist
linelist <- import("linelist_cleaned.rds")
37 trước hàm và sử dụng # import the linelist
linelist <- import("linelist_cleaned.rds")
35 để đại diện cho phần tử danh sách. Sử dụng
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
51, các phần tử danh sách đánh giá là TRUE sẽ được giữ lại. Ngược lại, nếu sử dụng
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
54, các phần tử danh sách đánh giá là TRUE sẽ bị loại bỏ.
## [1] "Other" "Missing" "St. Mark's Maternity Hospital (SMMH)"
## [4] "Port Hospital" "Military Hospital" "Central Hospital"
1 Trong ví dụ dưới đây, các phần tử danh sách bị loại bỏ nếu lớp của chúng không phải là data frames.
## [1] "Other" "Missing" "St. Mark's Maternity Hospital (SMMH)"
## [4] "Port Hospital" "Military Hospital" "Central Hospital"
2 Hàm định trước của bạn cũng có thể tham chiếu các phần tử/cột trong mỗi mục danh sách. Ví dụ, bên dưới, liệt kê các phần tử có giá trị trung bình của cột for (num in c(1,2,3,4,5)) { # the SEQUENCE is defined (numbers 1 to 5) and loop is opened with "{"
print(num + 2) # The OPERATIONS (add two to each sequence number and print)
} # The loop is closed with "}"
81 trên 25 sẽ bị loại bỏ.
## [1] "Other" "Missing" "St. Mark's Maternity Hospital (SMMH)"
## [4] "Port Hospital" "Military Hospital" "Central Hospital"
3 Lệnh này sẽ xóa tất cả các phần tử danh sách trống:
## [1] "Other" "Missing" "St. Mark's Maternity Hospital (SMMH)"
## [4] "Port Hospital" "Military Hospital" "Central Hospital"
4 ## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
67 PHẦN NÀY ĐANG ĐƯỢC XÂY DỰNG Các hàm applyNhóm hàm “apply” là một hàm R base thay thế cho purrr với các thao tác lặp lại. Bạn có thể đọc thêm về chúng tại đây. |