Ich implementiere eine Hilfsfunktion, die die Länge des bereitgestellten Parameters gegen eine Vorlage überprüft und einen Fehler auslöst, wenn die Längen unterschiedlich sind. Hier ist die Funktion:R: Unerwartete Verhalten mit Fehlervergleich in testthat
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))
}
Unten ist ein Beispiel dafür ist Nutzung:
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
ich diese in einer anderen Funktion bin mit zu überprüfen, ob die übergebenen Parameter korrekt sind. Und ich schreibe auch Tests für die Funktion mit der testthat
-Bibliothek.
Wenn ich die Länge mit einem einfachen Zahl allem bin im Vergleich funktioniert und der Test bestanden:
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)
Aber zu meiner Überraschung der Fehlermeldung nicht übereinstimmt, wenn ich einen Ausdruck verwende die Längen zu vergleichen:
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)"
Was habe ich verpasst und was ist hier los?
Vielen Dank! Das komplett verpasst. Und ich dachte über den Unterschied zwischen "grp" ... "' und '" \ "grp \" ... "' und was es verursacht hat (laut der Fehlermeldung) –