Kiểm tra phần tử
Thuộc phần Logic và luồng điều khiển trong hành trình R của Coddy. Bài học 14 trên 64.
x %in% set kiểm tra từng phần tử của x và trả về một giá trị logic cho mỗi phần tử. all() kiểm tra xem mọi phép kiểm tra đều là TRUE hay không, còn any() kiểm tra xem có ít nhất một phép kiểm tra đúng hay không.
required <- c("flour", "eggs", "milk")
pantry <- c("eggs", "salt", "flour")
print(required %in% pantry)
print(all(required %in% pantry))
print(any(required %in% pantry))Đầu ra:
[1] TRUE TRUE FALSE
[1] FALSE
[1] TRUELập chỉ số với phép kiểm tra phủ định để liệt kê những thứ còn thiếu, theo thứ tự của vectơ đầu tiên:
required <- c("flour", "eggs", "milk", "sugar")
pantry <- c("eggs", "flour")
missing <- required[!(required %in% pantry)]
print(missing)Đầu ra:
[1] "milk" "sugar"setequal(a, b) kiểm tra xem hai vector có chứa cùng các giá trị hay không, không xét thứ tự và các giá trị lặp lại:
print(setequal(c("a", "b"), c("b", "a", "a")))
print(setequal(c("a", "b"), c("a", "c")))Đầu ra:
[1] TRUE
[1] FALSEVới một vector rỗng, all() là TRUE và any() là FALSE: khi không có gì cần đáp ứng thì cũng không có gì bị thiếu.
which() chuyển một véc-tơ logic thành vị trí của các giá trị TRUE, cho bạn biết các kết quả khớp nằm ở đâu:
required <- c("flour", "eggs", "milk")
pantry <- c("eggs")
print(which(!(required %in% pantry)))Đầu ra:
[1] 1 3Thử thách
DễHoàn thiện check_recipe(required, pantry). Trả về ready khi mọi nguyên liệu cần thiết đều có trong kho. Nếu không, trả về missing: theo sau là các nguyên liệu còn thiếu, theo thứ tự trong required, được nối bằng , .
Đoạn code được cung cấp đọc các nguyên liệu cần thiết và kho dưới dạng các dòng phân tách bằng dấu phẩy, rồi in ra giá trị trả về.
Tự làm thử
check_recipe <- function(required, pantry) {
# Viết code của bạn ở đây
""
}
# Đoạn code đầu vào/đầu ra có sẵn: giữ nguyên
input <- suppressWarnings(readLines(file("stdin")))
cat(check_recipe(strsplit(input[1], ",")[[1]], strsplit(input[2], ",")[[1]]), sep = "\n")
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Logic và luồng điều khiển
1Chuỗi chuyên sâu
Chuỗi con với substr()Định dạng với sprintf()Tách và nối chuỗiTìm kiếm trong chuỗiThay thế văn bảnÔn tập: Tạo tên người dùng10Luồng điều khiển nâng cao
Hàm switch()ifelse() dạng vector hóarepeat và breakHàm đệ quyÔn tập: phân loại điểm3Tập hợp và đếm
Các giá trị duy nhấtCác phép toán trên tập hợpKiểm tra phần tửĐếm bằng table()Ôn tập: Khách mời sự kiện12Dự án: Theo dõi chi tiêu
Ghi lại các khoản chiTổng chi tiêuTự luyện tập: Trình biên dịch R online