Description Usage Arguments Details Value See Also Examples
View source: R/checkFunction.R
Convert a function, f
, into an S3
checkFunction
object. This adds f
to the
overview list returned by an allCheckFunctions()
call.
1 | checkFunction(f, description = NULL, classes = NULL)
|
f |
A function. See details and examples below for the exact requirements of this function. |
description |
A character string describing the check
performed by |
classes |
The classes for which |
checkFunction
represents the functions used in
check
and makeDataReport
for performing
error checks and quality control on variables in dataset.
An example of defining a new checkFunction
is given below.
Note that the minimal requirements for such a function (in order for it to be
compatible with check()
and makeDataReport()
) is the following
input/output-structure: It must input at least two arguments, namely
v
(a vector variable) and ...
. Additional implemented
arguments from check()
and makeDataReport()
include nMax
and
maxDecimals
, see e.g. the pre-defined checkFunction
identifyMissing
for more details about how these arguments should
be used.
The output must be a list with at least the two entries $problem
(a logical indicating whether a problem was found) and $message
(a character string message describing the problem). However, if the
result of a checkFunction
is furthermore appended with a
$problemValues
entry (including the values from the variable
that caused the problem, if relevant) and converted to a
checkResult
object, a print()
method also becomes
available for consistent formatting of checkFunction
results.
Note that all available checkFunction
s are listed by the call
allCheckFunctions()
and we recommed looking into these function,
if more knowledge about checkFunction
s is required.
A function of class checkFunction
which has to attributes,
namely classes
and description
.
allCheckFunctions
, check
, makeDataReport
,
messageGenerator
, checkResult
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | #Define a minimal requirement checkFunction that can be called
#from check() and makeDataReport(). This function checks whether all
#values in a variable are of equal length and that this
#length is then also larger than 10:
isID <- function(v, nMax = NULL, ...) {
out <- list(problem = FALSE, message = "")
if (class(v) %in% c("character", "factor", "labelled", "haven_labelled", "numeric", "integer")) {
v <- as.character(v)
lengths <- nchar(v)
if (all(lengths > 10) & length(unique(lengths)) == 1) {
out$problem <- TRUE
out$message <- "Warning: This variable seems to contain ID codes!"
}
}
out
}
#Convert it into a checkFunction
isID <- checkFunction(isID, description = "Identify ID variables (long, equal length values)",
classes = allClasses())
#Call isID
isID(c("12345678901", "23456789012", "34567890123", "45678901234"))
#isID now appears in a allCheckFunctions() call:
allCheckFunctions()
#Define a new checkFunction using messageGenerator() for generating
#the message and checkResult() for getting a printing method
#for its output. This function identifies values in a variable
#that include a colon, surrounded by alphanumeric characters. If
#at least one such value is found, the variable is flagged as
#having a problem:
identifyColons <- function(v, nMax = Inf, ... ) {
v <- unique(na.omit(v))
problemMessage <- "Note: The following values include colons:"
problem <- FALSE
problemValues <- NULL
problemValues <- v[sapply(gregexpr("[[:xdigit:]]:[[:xdigit:]]", v),
function(x) all(x != -1))]
if (length(problemValues) > 0) {
problem <- TRUE
}
problemStatus <- list(problem = problem,
problemValues = problemValues)
outMessage <- messageGenerator(problemStatus, problemMessage, nMax)
checkResult(list(problem = problem,
message = outMessage,
problemValues = problemValues))
}
#Make it a checkFunction:
identifyColons <- checkFunction(identifyColons,
description = "Identify non-suffixed nor -prefixed colons",
classes = c("character", "factor", "labelled", "haven_labelled"))
#Call it:
identifyColons(1:100)
identifyColons(c("a:b", 1:10, ":b", "a:b:c:d"))
#identifyColons now appears in a allCheckFunctions() call:
allCheckFunctions()
#Define a checkFunction that looks for negative values in numeric
#or integer variables:
identifyNeg <- function(v, nMax = Inf, maxDecimals = 2, ...) {
problem <- FALSE
problemValues <- printProblemValues <- NULL
problemMessage <- "Note: The following negative values were found:"
negOcc <- unique(v[v < 0])
if (length(negOcc > 0)) {
problemValues <- negOcc
printProblemValues <- round(negOcc, maxDecimals)
problem <- TRUE
}
outMessage <- messageGenerator(list(problem = problem,
problemValues = printProblemValues), problemMessage, nMax)
checkResult(list(problem = problem,
message = outMessage,
problemValues = problemValues))
}
#Make it a checkFunction
identifyNeg <- checkFunction(identifyNeg, "Identify negative values",
classes = c("integer", "numeric"))
#Call it:
identifyNeg(c(0:100))
identifyNeg(c(-20.1232323:20), nMax = 3, maxDecimals = 4)
#identifyNeg now appears in a allCheckFunctions() call:
allCheckFunctions()
|
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.