テンプレートに対して提供されたパラメータの長さをチェックし、長さが異なる場合にエラーをスローするヘルパ関数を実装しています。ここでは関数です:私は渡されたパラメータが正しいかどうかを確認するために、別の関数内でこれを使用していますR:テストでのエラー比較による予期しない動作
grp <- LETTERS[1:4]
assert_character_vec_length(grp, 3)
Error in assert_character_vec_length(grp, 3) : "grp" must be a character vector with length 3
:
assert_character_vec_length <- function(x, ...) {
name <- as.character(substitute(x))
lens <- unlist(list(...))
lnames <- as.character(substitute(list(...)))[-1]
lnames <- paste(lnames, collapse=' or ')
if(!(length(x) %in% lens) | !is.character(x))
stop(paste0('"', name, '"', ' must be a character vector with length ', lnames))
}
以下はその一例であることは使い方です。また、ライブラリのtestthat
を使って関数のテストを書いています。
私は、単純な数のすべてに長さを比較しています動作し、テストに合格:
x <- matrix(1:100, ncol=10)
grp <- LETTERS[1:4]
err1 <- '"grp" must be a character vector with length 10'
expect_error(assert_character_vec_length(grp, 10), err1)
しかし、私は長さを比較するための式を使用していたときに私の驚きにエラーメッセージが一致していません。
err2 <- '"grp" must be a character vector with length ncol(x)'
expect_error(assert_character_vec_length(grp, ncol(x)), err2)
Error: error$message does not match "\"grp\" must be a character vector with length ncol(x)". Actual value: ""grp" must be a character vector with length ncol(x)"
私は何を逃したとここで何が起こっていますか?
ありがとう!完全にそれを逃した。そして私は、 "" "grp" ... "と" "grp \" ... "との違いについて考えていました。それを(エラーメッセージごとに) –