Câu trả lời:
stopifnot()
để kiểm tra tính hợp lệ, để kiểm tra mã đó đang làm những gì nó phải làm, nhưng if (blahdiblah) stop("error message")
để kiểm tra đầu vào, để kiểm tra xem đầu vào của chương trình có hợp lệ hay không. Chỉ có điều sau sẽ xảy ra trong quá trình sử dụng bình thường.
assertthat
gói mới của Hadley , cung cấp câu trả lời tốt hơn stopifnot
hiện tại: github.com/hadley/assertthat
@Nick:
Bạn có thể kiểm soát thông báo lỗi của mình nếu bạn viết một hàm có tên mô tả để kiểm tra điều kiện sẽ tạo ra lỗi trong chương trình của bạn. Đây là một ví dụ:
Less_Than_8 = function(x) return(x < 8)
for (i in 1:10)
{
print(i)
stopifnot(Less_Than_8(i))
}
Thao tác này sẽ in các số từ 1 đến 8, sau đó in một thông báo cho biết
Error: Less_Than_8(i) is not TRUE
Sẽ thật tuyệt nếu chữ "i" trong ngoặc đơn được thay thế bằng giá trị không thành công trong bài kiểm tra, nhưng bạn sẽ nhận được những gì bạn phải trả.
Nếu bạn cần bất kỳ thứ gì lạ hơn thế, hãy tìm đến Runit và thử nghiệm điều đó như Harlan đã đề xuất.
stopifnot()
.
Điều này có thể đạt được bằng stop
lệnh. Lệnh này sẽ tạm dừng việc thực thi một hàm và in ra thông báo lỗi. Ví dụ, chúng ta có thể kiểm tra xem biến something
có phải là FALSE
:
if(something == FALSE){
stop("error message to print")
}
Tương tự, warning
lệnh sẽ in cảnh báo (nhưng vẫn tiếp tục thực thi mã).
if(something == FALSE){
warning("error message to print")
}
Cả hai đều được cung cấp bởi cơ sở R và không yêu cầu gói nào để chạy hoặc bao gồm việc viết các hàm của riêng bạn. Tôi thích cách tiếp cận này để viết mã với ít phụ thuộc hơn và cú pháp này được sử dụng rộng rãi trong phát triển gói. Tuy nhiên, chức năng tương tự được hỗ trợ bởi gói "khẳng định" với assert_that
chức năng đã được phát hành gần đây như một phần của "ngăn nắp" của Hadley.