2018-02-21 11:52:31 +01:00
# ==================================================================== #
# TITLE #
2021-02-02 23:57:35 +01:00
# Antimicrobial Resistance (AMR) Data Analysis for R #
2018-02-21 11:52:31 +01:00
# #
2019-01-02 23:24:07 +01:00
# SOURCE #
2020-07-08 14:48:06 +02:00
# https://github.com/msberends/AMR #
2018-02-21 11:52:31 +01:00
# #
# LICENCE #
2020-12-27 00:30:28 +01:00
# (c) 2018-2021 Berends MS, Luz CF et al. #
2020-10-08 11:16:03 +02:00
# Developed at the University of Groningen, the Netherlands, in #
# collaboration with non-profit organisations Certe Medical #
# Diagnostics & Advice, and University Medical Center Groningen. #
2018-02-21 11:52:31 +01:00
# #
2019-01-02 23:24:07 +01:00
# This R package is free software; you can freely use and distribute #
# it for both personal and commercial purposes under the terms of the #
# GNU General Public License version 2.0 (GNU GPL-2), as published by #
# the Free Software Foundation. #
2020-01-05 17:22:09 +01:00
# We created this package for both routine data analysis and academic #
# research and it was publicly released in the hope that it will be #
# useful, but it comes WITHOUT ANY WARRANTY OR LIABILITY. #
2020-10-08 11:16:03 +02:00
# #
# Visit our website for the full manual and a complete tutorial about #
2021-02-02 23:57:35 +01:00
# how to conduct AMR data analysis: https://msberends.github.io/AMR/ #
2018-02-21 11:52:31 +01:00
# ==================================================================== #
2021-01-18 16:57:56 +01:00
#' Transform Input to Minimum Inhibitory Concentrations (MIC)
2018-02-21 11:52:31 +01:00
#'
2021-03-07 13:52:39 +01:00
#' This ransforms vectors to a new class [`mic`], which treats the input as decimal numbers, while maintaining operators (such as ">=") and only allowing valid MIC values known to the field of (medical) microbiology.
2021-01-18 16:57:56 +01:00
#' @inheritSection lifecycle Stable Lifecycle
2018-02-21 11:52:31 +01:00
#' @rdname as.mic
2021-03-07 13:52:39 +01:00
#' @param x character or numeric vector
2018-02-21 11:52:31 +01:00
#' @param na.rm a logical indicating whether missing values should be removed
2019-11-28 22:32:17 +01:00
#' @details To interpret MIC values as RSI values, use [as.rsi()] on MIC values. It supports guidelines from EUCAST and CLSI.
2021-03-07 13:52:39 +01:00
#'
#' This class for MIC values is a quite a special data type: formally it is an ordered factor with valid MIC values as factor levels (to make sure only valid MIC values are retained), but for any mathematical operation it acts as decimal numbers:
#'
#' ```
#' x <- random_mic(10)
#' x
#' #> Class <mic>
#' #> [1] 16 1 8 8 64 >=128 0.0625 32 32 16
#'
#' is.factor(x)
#' #> [1] TRUE
#'
#' x[1] * 2
#' #> [1] 32
#'
#' median(x)
#' #> [1] 26
#' ```
#'
#' This makes it possible to maintain operators that often come with MIC values, such ">=" and "<=", even when filtering using numeric values in data analysis, e.g.:
#'
#' ```
#' x[x > 4]
#' #> Class <mic>
#' #> [1] 16 8 8 64 >=128 32 32 16
#'
#' df <- data.frame(x, hospital = "A")
#' subset(df, x > 4) # or with dplyr: df %>% filter(x > 4)
#' #> x hospital
#' #> 1 16 A
#' #> 5 64 A
#' #> 6 >=128 A
#' #> 8 32 A
#' #> 9 32 A
#' #> 10 16 A
#' ```
#'
#' The following [generic functions][groupGeneric()] are implemented for the MIC class: `!`, `!=`, `%%`, `%/%`, `&`, `*`, `+`, `-`, `/`, `<`, `<=`, `==`, `>`, `>=`, `^`, `|`, [abs()], [acos()], [acosh()], [all()], [any()], [asin()], [asinh()], [atan()], [atanh()], [ceiling()], [cos()], [cosh()], [cospi()], [cummax()], [cummin()], [cumprod()], [cumsum()], [digamma()], [exp()], [expm1()], [floor()], [gamma()], [lgamma()], [log()], [log10()], [log1p()], [log2()], [max()], [mean()], [median()], [min()], [prod()], [quantile()], [range()], [round()], [sign()], [signif()], [sin()], [sinh()], [sinpi()], [sqrt()], [sum()], [tan()], [tanh()], [tanpi()], [trigamma()] and [trunc()].
#' @return Ordered [factor] with additional class [`mic`], that in mathematical operations acts as decimal numbers. Bare in mind that the outcome of any mathematical operation on MICs will return a numeric value.
2019-11-28 23:00:37 +01:00
#' @aliases mic
2018-02-21 11:52:31 +01:00
#' @export
2019-11-28 22:32:17 +01:00
#' @seealso [as.rsi()]
2021-01-18 16:57:56 +01:00
#' @inheritSection AMR Read more on Our Website!
2018-02-22 20:48:48 +01:00
#' @examples
#' mic_data <- as.mic(c(">=32", "1.0", "1", "1.00", 8, "<=0.128", "8", "16", "16"))
#' is.mic(mic_data)
2018-04-02 16:05:09 +02:00
#'
2018-06-19 10:05:38 +02:00
#' # this can also coerce combined MIC/RSI values:
2018-07-25 14:17:04 +02:00
#' as.mic("<=0.002; S") # will return <=0.002
2021-03-05 15:36:39 +01:00
#'
#' # mathematical processing treats MICs as numeric values
#' fivenum(mic_data)
#' quantile(mic_data)
#' all(mic_data < 512)
2018-06-19 10:05:38 +02:00
#'
2019-05-10 16:44:59 +02:00
#' # interpret MIC values
#' as.rsi(x = as.mic(2),
#' mo = as.mo("S. pneumoniae"),
#' ab = "AMX",
#' guideline = "EUCAST")
#' as.rsi(x = as.mic(4),
#' mo = as.mo("S. pneumoniae"),
#' ab = "AMX",
#' guideline = "EUCAST")
#'
2021-02-25 10:33:08 +01:00
#' # plot MIC values, see ?plot
2018-02-22 20:48:48 +01:00
#' plot(mic_data)
2021-02-25 10:33:08 +01:00
#' plot(mic_data, mo = "E. coli", ab = "cipro")
2018-02-21 11:52:31 +01:00
as.mic <- function ( x , na.rm = FALSE ) {
2020-10-19 17:09:19 +02:00
meet_criteria ( x , allow_class = c ( " mic" , " character" , " numeric" , " integer" ) , allow_NA = TRUE )
meet_criteria ( na.rm , allow_class = " logical" , has_length = 1 )
2018-02-21 11:52:31 +01:00
if ( is.mic ( x ) ) {
x
} else {
2021-01-24 14:48:56 +01:00
x <- unlist ( x )
2018-02-21 11:52:31 +01:00
if ( na.rm == TRUE ) {
x <- x [ ! is.na ( x ) ]
}
x.bak <- x
2020-07-13 09:17:24 +02:00
2018-06-19 10:05:38 +02:00
# comma to period
2019-10-11 17:21:02 +02:00
x <- gsub ( " ," , " ." , x , fixed = TRUE )
2020-02-20 13:19:23 +01:00
# transform Unicode for >= and <=
x <- gsub ( " \u2264" , " <=" , x , fixed = TRUE )
x <- gsub ( " \u2265" , " >=" , x , fixed = TRUE )
2018-06-19 10:05:38 +02:00
# remove space between operator and number ("<= 0.002" -> "<=0.002")
2019-10-11 17:21:02 +02:00
x <- gsub ( " (<|=|>) +" , " \\1" , x )
2019-10-08 22:21:33 +02:00
# transform => to >= and =< to <=
2019-10-11 17:21:02 +02:00
x <- gsub ( " =<" , " <=" , x , fixed = TRUE )
2020-02-20 13:19:23 +01:00
x <- gsub ( " =>" , " >=" , x , fixed = TRUE )
2020-07-30 12:37:01 +02:00
# dots without a leading zero must start with 0
x <- gsub ( " ([^0-9]|^)[.]" , " \\10." , x )
2020-04-29 14:33:44 +02:00
# values like "<=0.2560.512" should be 0.512
2019-10-11 17:21:02 +02:00
x <- gsub ( " .*[.].*[.]" , " 0." , x )
2018-02-21 11:52:31 +01:00
# remove ending .0
2019-10-11 17:21:02 +02:00
x <- gsub ( " [.]+0$" , " " , x )
2018-02-21 11:52:31 +01:00
# remove all after last digit
2019-10-11 17:21:02 +02:00
x <- gsub ( " [^0-9]+$" , " " , x )
2019-10-08 22:21:33 +02:00
# keep only one zero before dot
x <- gsub ( " 0+[.]" , " 0." , x )
# starting 00 is probably 0.0 if there's no dot yet
x [ ! x %like% " [.]" ] <- gsub ( " ^00" , " 0.0" , x [ ! x %like% " [.]" ] )
2018-02-21 11:52:31 +01:00
# remove last zeroes
2019-10-11 17:21:02 +02:00
x <- gsub ( " ([.].?)0+$" , " \\1" , x )
x <- gsub ( " (.*[.])0+$" , " \\10" , x )
2018-12-29 22:24:19 +01:00
# remove ending .0 again
2019-10-11 17:21:02 +02:00
x [x %like% " [.]" ] <- gsub ( " 0+$" , " " , x [x %like% " [.]" ] )
2020-04-29 14:33:44 +02:00
# never end with dot
x <- gsub ( " [.]$" , " " , x )
2018-06-19 10:05:38 +02:00
# force to be character
x <- as.character ( x )
2019-10-08 22:21:33 +02:00
# trim it
x <- trimws ( x )
2020-04-29 14:33:44 +02:00
2019-05-10 16:44:59 +02:00
## previously unempty values now empty - should return a warning later on
2018-08-24 11:08:20 +02:00
x [x.bak != " " & x == " " ] <- " invalid"
2020-07-13 09:17:24 +02:00
2019-05-10 16:44:59 +02:00
# these are allowed MIC values and will become factor levels
2019-11-03 22:24:42 +01:00
ops <- c ( " <" , " <=" , " " , " >=" , " >" )
2020-12-28 22:24:33 +01:00
lvls <- c ( c ( t ( vapply ( FUN.VALUE = character ( 9 ) , ops , function ( x ) paste0 ( x , " 0.00" , 1 : 9 ) ) ) ) ,
unique ( c ( t ( vapply ( FUN.VALUE = character ( 104 ) , ops , function ( x ) paste0 ( x , sort ( as.double ( paste0 ( " 0.0" ,
2019-11-03 22:24:42 +01:00
sort ( c ( 1 : 99 , 125 , 128 , 256 , 512 , 625 ) ) ) ) ) ) ) ) ) ) ,
2020-12-28 22:24:33 +01:00
unique ( c ( t ( vapply ( FUN.VALUE = character ( 103 ) , ops , function ( x ) paste0 ( x , sort ( as.double ( paste0 ( " 0." ,
2019-11-03 22:24:42 +01:00
c ( 1 : 99 , 125 , 128 , 256 , 512 ) ) ) ) ) ) ) ) ) ,
2020-12-28 22:24:33 +01:00
c ( t ( vapply ( FUN.VALUE = character ( 10 ) , ops , function ( x ) paste0 ( x , sort ( c ( 1 : 9 , 1.5 ) ) ) ) ) ) ,
c ( t ( vapply ( FUN.VALUE = character ( 45 ) , ops , function ( x ) paste0 ( x , c ( 10 : 98 ) [9 : 98 %% 2 == TRUE ] ) ) ) ) ,
c ( t ( vapply ( FUN.VALUE = character ( 15 ) , ops , function ( x ) paste0 ( x , sort ( c ( 2 ^ c ( 7 : 10 ) , 80 * c ( 2 : 12 ) ) ) ) ) ) ) )
2020-07-13 09:17:24 +02:00
2020-09-18 16:05:53 +02:00
na_before <- x [is.na ( x ) | x == " " ] %pm>% length ( )
2018-02-21 11:52:31 +01:00
x [ ! x %in% lvls ] <- NA
2020-09-18 16:05:53 +02:00
na_after <- x [is.na ( x ) | x == " " ] %pm>% length ( )
2020-07-13 09:17:24 +02:00
2018-02-21 11:52:31 +01:00
if ( na_before != na_after ) {
2020-09-18 16:05:53 +02:00
list_missing <- x.bak [is.na ( x ) & ! is.na ( x.bak ) & x.bak != " " ] %pm>%
unique ( ) %pm>%
2021-02-04 16:48:16 +01:00
sort ( ) %pm>%
vector_and ( quotes = TRUE )
2020-11-10 16:35:56 +01:00
warning_ ( na_after - na_before , " results truncated (" ,
round ( ( ( na_after - na_before ) / length ( x ) ) * 100 ) ,
" %) that were invalid MICs: " ,
list_missing , call = FALSE )
2018-02-21 11:52:31 +01:00
}
2020-07-13 09:17:24 +02:00
2020-11-16 16:57:55 +01:00
set_clean_class ( factor ( x , levels = lvls , ordered = TRUE ) ,
new_class = c ( " mic" , " ordered" , " factor" ) )
2018-02-21 11:52:31 +01:00
}
}
2020-02-20 13:19:23 +01:00
all_valid_mics <- function ( x ) {
2020-10-19 17:09:19 +02:00
if ( ! inherits ( x , c ( " mic" , " character" , " factor" , " numeric" , " integer" ) ) ) {
return ( FALSE )
}
2020-06-26 10:21:22 +02:00
x_mic <- tryCatch ( suppressWarnings ( as.mic ( x [ ! is.na ( x ) ] ) ) ,
error = function ( e ) NA )
2020-12-17 16:22:25 +01:00
! any ( is.na ( x_mic ) ) && ! all ( is.na ( x ) )
2020-02-20 13:19:23 +01:00
}
2018-02-21 11:52:31 +01:00
#' @rdname as.mic
#' @export
is.mic <- function ( x ) {
2020-02-10 14:18:15 +01:00
inherits ( x , " mic" )
2018-02-21 11:52:31 +01:00
}
2020-05-28 16:48:55 +02:00
#' @method as.double mic
2018-02-21 11:52:31 +01:00
#' @export
#' @noRd
as.double.mic <- function ( x , ... ) {
2020-12-09 09:40:50 +01:00
as.double ( gsub ( " [<=>]+" , " " , as.character ( x ) ) )
2018-02-21 11:52:31 +01:00
}
2020-05-28 16:48:55 +02:00
#' @method as.integer mic
2018-02-21 11:52:31 +01:00
#' @export
#' @noRd
as.integer.mic <- function ( x , ... ) {
2020-12-09 09:40:50 +01:00
as.integer ( gsub ( " [<=>]+" , " " , as.character ( x ) ) )
2018-02-21 11:52:31 +01:00
}
2020-05-28 16:48:55 +02:00
#' @method as.numeric mic
2018-02-21 11:52:31 +01:00
#' @export
#' @noRd
as.numeric.mic <- function ( x , ... ) {
2020-12-09 09:40:50 +01:00
as.numeric ( gsub ( " [<=>]+" , " " , as.character ( x ) ) )
2018-02-21 11:52:31 +01:00
}
2020-05-28 16:48:55 +02:00
#' @method droplevels mic
2018-12-29 22:24:19 +01:00
#' @export
#' @noRd
2021-02-25 10:33:08 +01:00
droplevels.mic <- function ( x , exclude = if ( any ( is.na ( levels ( x ) ) ) ) NULL else NA , as.mic = TRUE , ... ) {
2018-12-29 22:24:19 +01:00
x <- droplevels.factor ( x , exclude = exclude , ... )
2021-02-25 10:33:08 +01:00
if ( as.mic == TRUE ) {
class ( x ) <- c ( " mic" , " ordered" , " factor" )
}
2018-12-29 22:24:19 +01:00
x
}
2020-08-28 21:55:47 +02:00
# will be exported using s3_register() in R/zzz.R
2020-08-26 11:33:54 +02:00
pillar_shaft.mic <- function ( x , ... ) {
2020-12-09 09:40:50 +01:00
crude_numbers <- as.double ( x )
operators <- gsub ( " [^<=>]+" , " " , as.character ( x ) )
pasted <- trimws ( paste0 ( operators , trimws ( format ( crude_numbers ) ) ) )
out <- pasted
2020-08-28 21:55:47 +02:00
out [is.na ( x ) ] <- font_na ( NA )
2020-12-09 09:40:50 +01:00
out <- gsub ( " (<|=|>)" , font_silver ( " \\1" ) , out )
2021-03-07 13:52:39 +01:00
out <- gsub ( " ([.]?0+)$" , font_white ( " \\1" ) , out )
2020-12-09 09:40:50 +01:00
create_pillar_column ( out , align = " right" , width = max ( nchar ( pasted ) ) )
2020-08-26 11:33:54 +02:00
}
2020-08-28 21:55:47 +02:00
# will be exported using s3_register() in R/zzz.R
2020-08-26 11:33:54 +02:00
type_sum.mic <- function ( x , ... ) {
" mic"
}
2020-05-28 16:48:55 +02:00
#' @method print mic
2018-02-21 11:52:31 +01:00
#' @export
#' @noRd
print.mic <- function ( x , ... ) {
2020-05-27 16:37:49 +02:00
cat ( " Class <mic>\n" )
2018-08-01 22:37:28 +02:00
print ( as.character ( x ) , quote = FALSE )
2021-03-07 13:52:39 +01:00
att <- attributes ( x )
if ( " na.action" %in% names ( att ) ) {
cat ( font_silver ( paste0 ( " (NA " , class ( att $ na.action ) , " : " , paste0 ( att $ na.action , collapse = " , " ) , " )\n" ) ) )
}
2018-02-21 11:52:31 +01:00
}
2020-05-28 16:48:55 +02:00
#' @method summary mic
2018-02-21 11:52:31 +01:00
#' @export
#' @noRd
summary.mic <- function ( object , ... ) {
2021-03-07 13:52:39 +01:00
summary ( as.double ( object ) , ... )
2018-02-21 11:52:31 +01:00
}
2020-05-28 16:48:55 +02:00
#' @method [ mic
2020-04-13 21:09:56 +02:00
#' @export
#' @noRd
" [.mic" <- function ( x , ... ) {
y <- NextMethod ( )
attributes ( y ) <- attributes ( x )
y
}
2020-05-28 16:48:55 +02:00
#' @method [[ mic
2020-04-13 21:09:56 +02:00
#' @export
#' @noRd
" [[.mic" <- function ( x , ... ) {
y <- NextMethod ( )
attributes ( y ) <- attributes ( x )
y
}
2020-05-28 16:48:55 +02:00
#' @method [<- mic
2020-04-13 21:09:56 +02:00
#' @export
#' @noRd
" [<-.mic" <- function ( i , j , ... , value ) {
value <- as.mic ( value )
y <- NextMethod ( )
attributes ( y ) <- attributes ( i )
y
}
2020-05-28 16:48:55 +02:00
#' @method [[<- mic
2020-04-13 21:09:56 +02:00
#' @export
#' @noRd
" [[<-.mic" <- function ( i , j , ... , value ) {
value <- as.mic ( value )
y <- NextMethod ( )
attributes ( y ) <- attributes ( i )
y
}
2020-05-28 16:48:55 +02:00
#' @method c mic
2020-04-13 21:09:56 +02:00
#' @export
#' @noRd
c.mic <- function ( x , ... ) {
2020-09-18 16:05:53 +02:00
y <- unlist ( lapply ( list ( ... ) , as.character ) )
x <- as.character ( x )
as.mic ( c ( x , y ) )
2020-04-13 21:09:56 +02:00
}
2020-09-25 14:44:50 +02:00
#' @method unique mic
#' @export
#' @noRd
unique.mic <- function ( x , incomparables = FALSE , ... ) {
y <- NextMethod ( )
attributes ( y ) <- attributes ( x )
y
}
2020-09-28 01:08:55 +02:00
2021-03-07 13:52:39 +01:00
#' @method sort mic
2021-03-05 15:36:39 +01:00
#' @export
#' @noRd
2021-03-07 13:52:39 +01:00
sort.mic <- function ( x , decreasing = FALSE , ... ) {
if ( decreasing == TRUE ) {
ord <- order ( - as.double ( x ) )
} else {
ord <- order ( as.double ( x ) )
2021-03-05 15:36:39 +01:00
}
2021-03-07 13:52:39 +01:00
x [ord ]
2021-03-05 15:36:39 +01:00
}
2021-03-07 13:52:39 +01:00
#' @method hist mic
2021-03-05 15:36:39 +01:00
#' @export
#' @noRd
2021-03-07 13:52:39 +01:00
hist.mic <- function ( x , ... ) {
warning_ ( " Use `plot()` or `ggplot()` for plotting MIC values" , call = FALSE )
hist ( log2 ( x ) )
2021-03-05 15:36:39 +01:00
}
2021-03-07 13:52:39 +01:00
# will be exported using s3_register() in R/zzz.R
get_skimmers.mic <- function ( column ) {
skimr :: sfl (
skim_type = " mic" ,
min = ~ min ( ., na.rm = TRUE ) ,
max = ~ max ( ., na.rm = TRUE ) ,
median = ~ median ( ., na.rm = TRUE ) ,
n_unique = ~ pm_n_distinct ( ., na.rm = TRUE ) ,
hist_log2 = ~ skimr :: inline_hist ( log2 ( stats :: na.omit ( .) ) )
)
2021-03-05 15:36:39 +01:00
}
2021-03-07 13:52:39 +01:00
# Miscellaneous mathematical functions ------------------------------------
#' @method mean mic
2021-03-05 15:36:39 +01:00
#' @export
#' @noRd
2021-03-07 13:52:39 +01:00
mean.mic <- function ( x , trim = 0 , na.rm = FALSE , ... ) {
mean ( as.double ( x ) , trim = trim , na.rm = na.rm , ... )
2021-03-05 15:36:39 +01:00
}
2021-03-07 13:52:39 +01:00
#' @method median mic
2021-03-05 15:36:39 +01:00
#' @export
#' @noRd
2021-03-07 13:52:39 +01:00
median.mic <- function ( x , na.rm = FALSE , ... ) {
stats :: median ( as.double ( x ) , na.rm = na.rm , ... )
2021-03-05 15:36:39 +01:00
}
2021-03-07 13:52:39 +01:00
#' @method quantile mic
2021-03-05 15:36:39 +01:00
#' @export
#' @noRd
2021-03-07 13:52:39 +01:00
quantile.mic <- function ( x , probs = seq ( 0 , 1 , 0.25 ) , na.rm = FALSE ,
names = TRUE , type = 7 , ... ) {
stats :: quantile ( as.double ( x ) , props = props , na.rm = na.rm , names = names , type = type , ... )
2021-03-05 15:36:39 +01:00
}
2021-03-07 13:52:39 +01:00
# Math (see ?groupGeneric) ----------------------------------------------
#' @method abs mic
2021-03-05 15:36:39 +01:00
#' @export
#' @noRd
2021-03-07 13:52:39 +01:00
abs.mic <- function ( x ) {
abs ( as.double ( x ) )
2021-03-05 15:36:39 +01:00
}
2021-03-07 13:52:39 +01:00
#' @method sign mic
2021-03-05 15:36:39 +01:00
#' @export
#' @noRd
2021-03-07 13:52:39 +01:00
sign.mic <- function ( x ) {
sign ( as.double ( x ) )
2021-03-05 15:36:39 +01:00
}
2021-03-07 13:52:39 +01:00
#' @method sqrt mic
2021-03-05 15:36:39 +01:00
#' @export
#' @noRd
2021-03-07 13:52:39 +01:00
sqrt.mic <- function ( x ) {
sqrt ( as.double ( x ) )
2021-03-05 15:36:39 +01:00
}
#' @method floor mic
#' @export
#' @noRd
floor.mic <- function ( x ) {
floor ( as.double ( x ) )
}
#' @method ceiling mic
#' @export
#' @noRd
ceiling.mic <- function ( x ) {
ceiling ( as.double ( x ) )
}
2021-03-07 13:52:39 +01:00
#' @method trunc mic
#' @export
#' @noRd
trunc.mic <- function ( x , ... ) {
trunc ( as.double ( x ) , ... )
}
#' @method round mic
#' @export
#' @noRd
round.mic <- function ( x , digits = 0 ) {
round ( as.double ( x ) , digits = digits )
}
#' @method signif mic
#' @export
#' @noRd
signif.mic <- function ( x , digits = 6 ) {
signif ( as.double ( x ) , digits = digits )
}
#' @method exp mic
#' @export
#' @noRd
exp.mic <- function ( x ) {
exp ( as.double ( x ) )
}
#' @method log mic
#' @export
#' @noRd
log.mic <- function ( x , base = exp ( 1 ) ) {
log ( as.double ( x ) , base = base )
}
#' @method log10 mic
#' @export
#' @noRd
log10.mic <- function ( x ) {
log10 ( as.double ( x ) )
}
#' @method log2 mic
#' @export
#' @noRd
log2.mic <- function ( x ) {
log2 ( as.double ( x ) )
}
#' @method expm1 mic
#' @export
#' @noRd
expm1.mic <- function ( x ) {
expm1 ( as.double ( x ) )
}
#' @method log1p mic
#' @export
#' @noRd
log1p.mic <- function ( x ) {
log1p ( as.double ( x ) )
}
#' @method cos mic
#' @export
#' @noRd
cos.mic <- function ( x ) {
cos ( as.double ( x ) )
}
#' @method sin mic
#' @export
#' @noRd
sin.mic <- function ( x ) {
sin ( as.double ( x ) )
}
#' @method tan mic
#' @export
#' @noRd
tan.mic <- function ( x ) {
tan ( as.double ( x ) )
}
#' @method cospi mic
#' @export
#' @noRd
cospi.mic <- function ( x ) {
cospi ( as.double ( x ) )
}
#' @method sinpi mic
#' @export
#' @noRd
sinpi.mic <- function ( x ) {
sinpi ( as.double ( x ) )
}
#' @method tanpi mic
#' @export
#' @noRd
tanpi.mic <- function ( x ) {
tanpi ( as.double ( x ) )
}
#' @method acos mic
#' @export
#' @noRd
acos.mic <- function ( x ) {
acos ( as.double ( x ) )
}
#' @method asin mic
#' @export
#' @noRd
asin.mic <- function ( x ) {
asin ( as.double ( x ) )
}
#' @method atan mic
#' @export
#' @noRd
atan.mic <- function ( x ) {
atan ( as.double ( x ) )
}
#' @method cosh mic
#' @export
#' @noRd
cosh.mic <- function ( x ) {
cosh ( as.double ( x ) )
}
#' @method sinh mic
#' @export
#' @noRd
sinh.mic <- function ( x ) {
sinh ( as.double ( x ) )
}
#' @method tanh mic
#' @export
#' @noRd
tanh.mic <- function ( x ) {
tanh ( as.double ( x ) )
}
#' @method acosh mic
#' @export
#' @noRd
acosh.mic <- function ( x ) {
acosh ( as.double ( x ) )
}
#' @method asinh mic
#' @export
#' @noRd
asinh.mic <- function ( x ) {
asinh ( as.double ( x ) )
}
#' @method atanh mic
#' @export
#' @noRd
atanh.mic <- function ( x ) {
atanh ( as.double ( x ) )
}
#' @method lgamma mic
#' @export
#' @noRd
lgamma.mic <- function ( x ) {
lgamma ( as.double ( x ) )
}
#' @method gamma mic
#' @export
#' @noRd
gamma.mic <- function ( x ) {
gamma ( as.double ( x ) )
}
#' @method digamma mic
#' @export
#' @noRd
digamma.mic <- function ( x ) {
digamma ( as.double ( x ) )
}
#' @method trigamma mic
#' @export
#' @noRd
trigamma.mic <- function ( x ) {
trigamma ( as.double ( x ) )
}
#' @method cumsum mic
#' @export
#' @noRd
cumsum.mic <- function ( x ) {
cumsum ( as.double ( x ) )
}
#' @method cumprod mic
#' @export
#' @noRd
cumprod.mic <- function ( x ) {
cumprod ( as.double ( x ) )
}
#' @method cummax mic
#' @export
#' @noRd
cummax.mic <- function ( x ) {
cummax ( as.double ( x ) )
}
#' @method cummin mic
#' @export
#' @noRd
cummin.mic <- function ( x ) {
cummin ( as.double ( x ) )
}
# Ops (see ?groupGeneric) -----------------------------------------------
2021-03-05 15:36:39 +01:00
#' @method + mic
#' @export
#' @noRd
`+.mic` <- function ( e1 , e2 ) {
as.double ( e1 ) + as.double ( e2 )
}
#' @method - mic
#' @export
#' @noRd
`-.mic` <- function ( e1 , e2 ) {
as.double ( e1 ) - as.double ( e2 )
}
#' @method * mic
#' @export
#' @noRd
`*.mic` <- function ( e1 , e2 ) {
as.double ( e1 ) * as.double ( e2 )
}
#' @method / mic
#' @export
#' @noRd
`/.mic` <- function ( e1 , e2 ) {
as.double ( e1 ) / as.double ( e2 )
}
#' @method ^ mic
#' @export
#' @noRd
`^.mic` <- function ( e1 , e2 ) {
as.double ( e1 ) ^ as.double ( e2 )
}
#' @method %% mic
#' @export
#' @noRd
`%%.mic` <- function ( e1 , e2 ) {
as.double ( e1 ) %% as.double ( e2 )
}
#' @method %/% mic
#' @export
#' @noRd
`%/%.mic` <- function ( e1 , e2 ) {
as.double ( e1 ) %/% as.double ( e2 )
}
2021-03-07 13:52:39 +01:00
#' @method & mic
#' @export
#' @noRd
`&.mic` <- function ( e1 , e2 ) {
as.double ( e1 ) & as.double ( e2 )
}
#' @method | mic
#' @export
#' @noRd
`|.mic` <- function ( e1 , e2 ) {
as.double ( e1 ) | as.double ( e2 )
}
#' @method ! mic
#' @export
#' @noRd
`!.mic` <- function ( x ) {
! as.double ( x )
}
2021-03-05 15:36:39 +01:00
#' @method == mic
#' @export
#' @noRd
`==.mic` <- function ( e1 , e2 ) {
as.double ( e1 ) == as.double ( e2 )
}
#' @method != mic
#' @export
#' @noRd
`!=.mic` <- function ( e1 , e2 ) {
as.double ( e1 ) != as.double ( e2 )
}
#' @method < mic
#' @export
#' @noRd
`<.mic` <- function ( e1 , e2 ) {
as.double ( e1 ) < as.double ( e2 )
}
#' @method <= mic
#' @export
#' @noRd
`<=.mic` <- function ( e1 , e2 ) {
as.double ( e1 ) <= as.double ( e2 )
}
#' @method >= mic
#' @export
#' @noRd
`>=.mic` <- function ( e1 , e2 ) {
as.double ( e1 ) >= as.double ( e2 )
}
#' @method > mic
#' @export
#' @noRd
`>.mic` <- function ( e1 , e2 ) {
as.double ( e1 ) > as.double ( e2 )
}
2021-03-07 13:52:39 +01:00
# Summary (see ?groupGeneric) -------------------------------------------
#' @method all mic
2021-03-05 15:36:39 +01:00
#' @export
#' @noRd
2021-03-07 13:52:39 +01:00
all.mic <- function ( ... , na.rm = FALSE ) {
all ( as.double ( c ( ... ) ) , na.rm = na.rm )
2021-03-05 15:36:39 +01:00
}
2021-03-07 13:52:39 +01:00
#' @method any mic
2021-03-05 15:36:39 +01:00
#' @export
#' @noRd
2021-03-07 13:52:39 +01:00
any.mic <- function ( ... , na.rm = FALSE ) {
any ( as.double ( c ( ... ) ) , na.rm = na.rm )
2021-03-05 15:36:39 +01:00
}
2021-03-07 13:52:39 +01:00
#' @method sum mic
#' @export
#' @noRd
sum.mic <- function ( ... , na.rm = FALSE ) {
sum ( as.double ( c ( ... ) ) , na.rm = na.rm )
}
#' @method prod mic
#' @export
#' @noRd
prod.mic <- function ( ... , na.rm = FALSE ) {
prod ( as.double ( c ( ... ) ) , na.rm = na.rm )
}
#' @method min mic
#' @export
#' @noRd
min.mic <- function ( ... , na.rm = FALSE ) {
min ( as.double ( c ( ... ) ) , na.rm = na.rm )
}
#' @method max mic
#' @export
#' @noRd
max.mic <- function ( ... , na.rm = FALSE ) {
max ( as.double ( c ( ... ) ) , na.rm = na.rm )
}
#' @method range mic
#' @export
#' @noRd
range.mic <- function ( ... , na.rm = FALSE ) {
range ( as.double ( c ( ... ) ) , na.rm = na.rm )
2020-09-28 01:08:55 +02:00
}