Bạn có nên sử dụng các chức năng kiểm tra tiền tố/postcondition của RUnit để thực hiện các điều kiện tiên quyết/báo cáo sau điều kiện hoặc thực hiện điều này với một số tính chính xác trong hoạt động hay không?Làm thế nào để xác nhận trong R?
10
A
Trả lời
4
Tôi biết đây là một bài đăng cũ, nhưng có lẽ câu trả lời này sẽ hữu ích cho những người khác đang tìm kiếm các xác nhận R trong biểu mẫu toán tử. Đây có thể là một bước đi đúng hướng nếu bạn muốn tack một khẳng định vào cuối của một tuyên bố phiền hà.
"%assert%" <- function(e1, e2)
{
args <- as.list(match.call()[-1])
defs <- as.list(args$e1)
preds <- as.list(args$e2)[-1L]
for(var in names(defs)[names(defs) != ""]) assign(var, eval(defs[[var]]))
for(p in unlist(preds)) eval(
parse(
text = paste0("if(!", deparse(p), ") stop('assertion ",deparse(p) , " is not true')")
)
)
return(eval(args$e1))
}
Ví dụ: nếu bạn đang tính toán giá trị trung bình của một vector x và bạn muốn chắc chắn rằng mỗi phần tử là từ một đến mười, bạn có thể sử dụng
mean(x = sample(1:10, size = 100, replace = T)) %assert% c(min(x) > 0 && max(x) < 11)
#5.62
Nếu tình trạng này isn' Đúng, bạn sẽ nhận được một lỗi thông tin (ish) như
mean(x = sample(11:20, size = 100, replace = T)) %assert% c(min(x) > 0, max(x) < 11)
#Error in eval(expr, envir, enclos) : assertion max(x) < 11 is not true
Nó hoàn toàn chưa được kiểm tra, vì vậy hãy sử dụng với nguy hiểm của chính bạn!
20
Tôi luôn sử dụng stopifnot()
để xác nhận.
Được phân bổ. Thật dễ dàng, rõ ràng, nó ở trong R Base và với nó rất phổ biến. –
nhưng bị dễ đọc. Tôi muốn giải thích lý do tại sao điều kiện tiên quyết thất bại và kiểm tra * chỉ đơn giản là _checkEquals (a, b, "a phải b") _ –
Hoặc sử dụng 'if' +' stop' cho phép kiểm tra điều kiện và đưa ra thông báo lỗi. – nico