Mục lục:
- Vấn đề
- Giải pháp bạn đang tìm kiếm là hàm ifelse () , là một cách vector hoá để chọn các giá trị từ hai vectơ. Chức năng đặc biệt này có ba đối số:
Video: IAR Systems Advanced Debugging Breakpoints 2025
Vectorization là một trong những thuộc tính xác định của ngôn ngữ R. R sẽ không được R nếu nó không có một số phiên bản vectorized của câu lệnh if … else.
Vấn đề
Chức năng priceCalculator () vẫn không phải là rất tiết kiệm để sử dụng. Nếu bạn có 100 khách hàng, bạn sẽ phải tính giá cho từng khách hàng một cách riêng biệt. Kiểm tra xem điều gì sẽ xảy ra nếu bạn thêm, ví dụ, ba số giờ khác nhau làm đối số:
R không chỉ cảnh báo bạn rằng có điều gì đó đang xáo trộn, nhưng kết quả bạn nhận được là sai. Thay vì $ 4, 664, khách hàng thứ hai sẽ chỉ bị tính phí $ 4, 198:
priceCalculator (110) [1] 4198
Thông báo cảnh báo sẽ cho bạn một ý tưởng chính xác về những gì đã hapened. Câu lệnh if chỉ có thể xử lý với một giá trị duy nhất, nhưng giờ biểu thức> 100 trả về hai giá trị, như được biểu diễn bằng mã sau:c (25, 110)> 100 [1] FALSE TRUE
Chọn dựa trên một vector logic trong R
Giải pháp bạn đang tìm kiếm là hàm ifelse (), là một cách vector hoá để chọn các giá trị từ hai vectơ. Chức năng đặc biệt này có ba đối số:
Một vector kiểm tra với các giá trị logic
-
Một vector với các giá trị cần trả về nếu giá trị tương ứng trong vector kiểm tra là TRUE
- Một vector có giá trị cần trả về nếu giá trị tương ứng trong vector kiểm tra là FALSE
-
Cách hoạt động
Hãy xem ví dụ sau: >> ifelse (c <1 2 3 4) [1] 1 4
Chạy qua các bước mà hàm mất:
Biểu thức điều kiện c (1, 3) <2. 5 được đánh giá bằng một vector logic.
Giá trị đầu tiên của vector này là TRUE, bởi vì 1 nhỏ hơn 2. 5. Vì vậy, giá trị đầu tiên của kết quả là giá trị đầu tiên của đối số thứ hai, là 1.
-
Giá trị tiếp theo là FALSE, bởi vì 3 lớn hơn 2. 5. Do đó, ifelse () lấy giá trị thứ hai của đối số thứ ba (là 4) là giá trị thứ hai của kết quả.
-
Một vector với các giá trị đã chọn sẽ được trả về như là kết quả.
-
Hãy thử
-
Để xem cách hoạt động của nó trong ví dụ của hàm priceCalculator (), hãy thử chức năng này tại dòng lệnh trong bảng điều khiển. Giả sử bạn có hai khách hàng và bạn đã làm việc 25 và 110 giờ cho họ, tương ứng. Bạn có thể tính giá net với mã sau: >> my. giờ của tôi. giờ * 40 * ifelse (của tôi.giờ> 100, 0.9, 1) [1000] 3960 Hãy nhớ rằng, hàm ifelse () có thể tái chế các đối số của nó. Và đó là chính xác những gì nó làm ở đây. Trong cuộc gọi hàm ifelse () trước đó, bạn dịch các vector hợp logic được tạo bởi biểu thức my. giờ> 100 vào một vector chứa các số 0. 9 và 1 thay cho TRUE và FALSE.
Thích ứng chức năng trong R
Tất nhiên, bạn cần phải thích ứng với chức năng priceCalculator () theo cách mà bạn cũng có thể nhập một vector với các giá trị cho đối số chung. Nếu không, bạn sẽ không thể tính giá cho một hỗn hợp của khách hàng công cộng và tư nhân. Chức năng cuối cùng sẽ như sau:
priceCalculator <- function (hours, pph = 40, public) {net. giá <- giờ * net pph. giá 100, 0.9, 1) tot. giá <- net. giá * ifelse (public, 1. 06, 1.12) round (price)}
Tiếp theo, tạo một khung dữ liệu nhỏ để kiểm tra chức năng. Ví dụ: >> khách hàng <- dữ liệu. frame (+ giờ = c (25, 110, 125, 40), + public = c (TRUE, TRUE, FALSE, FALSE) +)