2010-02-10 25 views

Trả lời

99

stopifnot()

Bạn cũng có thể quan tâm đến các gói như Runittestthat cho kiểm tra đơn vị.

+0

Có cách nào để kiểm soát thông báo lỗi được báo cáo nếu stopifnot() dừng không? – Nick

+10

@Nick, không. Sử dụng '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 (" thông báo lỗi ")' để kiểm tra đầu vào, để kiểm tra đầu vào cho chương trình là có hiệu lực. Chỉ sau này sẽ xảy ra trong quá trình sử dụng bình thường. – Harlan

+4

Xem thêm gói 'assertthat' mới của Hadley, cung cấp câu trả lời tốt hơn so với 'stopifnot': https://github.com/hadley/assertthat – Harlan

11

@Nick:

Bạn có thể kiểm soát thông báo lỗi của bạn nếu bạn viết một hàm với tên mô tả để kiểm tra điều kiện là sẽ ném ra một lỗi trong chương trình của bạn. Dưới đâ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)) 
} 

này sẽ in những con số từ 1 đến 8, sau đó in một thông báo nói rằng

Error: Less_Than_8(i) is not TRUE 

Nó sẽ được tốt đẹp nếu "i" trong ngoặc đơn được thay thế bằng giá trị mà thất bại trong thử nghiệm, nhưng bạn có được những gì bạn phải trả.

Nếu bạn cần bất kỳ điều gì huyền ảo hơn thế, hãy xem xét Runit và testthat như Harlan đã đề xuất.

+0

Bạn cũng có thể đặt định nghĩa hàm bên trong' stopifnot() '. – naught101

+1

naught101, điểm của việc thử nghiệm trong một hàm được đặt tên là lấy tên của thử nghiệm được in trong thông báo lỗi – Matthew

Các vấn đề liên quan