R Under development (unstable) (2026-08-05 r90355) -- "Unsuffered Consequences" Copyright (C) 2026 The R Foundation for Statistical Computing Platform: x86_64-pc-linux-gnu R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. Natural language support but running in an English locale R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > pkgname <- "outliertree" > source(file.path(R.home("share"), "R", "examples-header.R")) > options(warn = 1) > library('outliertree') > > base::assign(".oldSearch", base::search(), pos = 'CheckExEnv') > base::assign(".old_wd", base::getwd(), pos = 'CheckExEnv') > cleanEx() > nameEx("outlier.tree") > ### * outlier.tree > > flush(stderr()); flush(stdout()) > > ### Name: outlier.tree > ### Title: Outlier Tree > ### Aliases: outlier.tree > > ### ** Examples > > library(outliertree) > > ### example dataset with interesting outliers > data(hypothyroid) > > ### fit the model and get a print of outliers > model <- outlier.tree(hypothyroid, + outliers_print=10, + save_outliers=TRUE, + nthreads=1) /usr/local/clang22me/bin/../include/c++/v1/__string/constexpr_c_functions.h:227:33: runtime error: load of misaligned address 0x000000000001 for type 'int *', which requires 4 byte alignment 0x000000000001: note: pointer points here #0 0x7f8780b9c794 in int* std::__1::__constexpr_memmove[abi:nqe220108](int*, int*, std::__1::__element_count) /usr/local/clang22me/bin/../include/c++/v1/__string/constexpr_c_functions.h:227:5 #1 0x7f8780b9c794 in std::__1::pair std::__1::__copy_trivial_impl[abi:nqe220108](int*, int*, int*) /usr/local/clang22me/bin/../include/c++/v1/__algorithm/copy_move_common.h:64:3 #2 0x7f8780b9c794 in std::__1::pair std::__1::__copy_impl::operator()[abi:nqe220108](int*, int*, int*) const /usr/local/clang22me/bin/../include/c++/v1/__algorithm/copy.h:115:12 #3 0x7f8780b9c794 in std::__1::pair std::__1::__copy_move_unwrap_iters[abi:nqe220108](int*, int*, int*) /usr/local/clang22me/bin/../include/c++/v1/__algorithm/copy_move_common.h:94:19 #4 0x7f8780b9c472 in std::__1::pair std::__1::__copy[abi:nqe220108](int*, int*, int*) /usr/local/clang22me/bin/../include/c++/v1/__algorithm/copy.h:122:10 #5 0x7f8780b9c472 in void std::__1::vector>::__assign_with_size[abi:nqe220108](int*, int*, long) /usr/local/clang22me/bin/../include/c++/v1/__vector/vector.h:1061:21 #6 0x7f8780bd4ce0 in void std::__1::vector>::assign[abi:nqe220108](int*, int*) /usr/local/clang22me/bin/../include/c++/v1/__vector/vector.h:318:5 #7 0x7f8780bd4ce0 in fit_outliers_models(ModelOutputs&, double*, unsigned long, int*, unsigned long, int*, int*, unsigned long, int*, unsigned long, char*, int, bool, bool, bool, bool, bool, unsigned long, double, unsigned long, unsigned long, double, bool, bool, double, double) /data/localhost/ripley/R/packages/tests-clang-UBSAN/outliertree/src/fit_model.cpp:156:28 #8 0x7f8780b7ea1c in fit_OutlierTree(Rcpp::Vector<14, Rcpp::PreserveStorage>, unsigned long, Rcpp::Vector<13, Rcpp::PreserveStorage>, unsigned long, Rcpp::Vector<13, Rcpp::PreserveStorage>, Rcpp::Vector<13, Rcpp::PreserveStorage>, unsigned long, Rcpp::Vector<13, Rcpp::PreserveStorage>, unsigned long, Rcpp::Vector<10, Rcpp::PreserveStorage>, int, bool, bool, bool, bool, bool, unsigned long, double, unsigned long, unsigned long, double, bool, bool, double, double, bool, Rcpp::ListOf>, Rcpp::ListOf>, Rcpp::Vector<16, Rcpp::PreserveStorage>, Rcpp::Vector<16, Rcpp::PreserveStorage>, Rcpp::Vector<16, Rcpp::PreserveStorage>, Rcpp::Vector<14, Rcpp::PreserveStorage>, Rcpp::Vector<14, Rcpp::PreserveStorage>) /data/localhost/ripley/R/packages/tests-clang-UBSAN/outliertree/src/Rwrapper.cpp:1399:22 #9 0x7f8780b2bf77 in _outliertree_fit_OutlierTree /data/localhost/ripley/R/packages/tests-clang-UBSAN/outliertree/src/RcppExports.cpp:51:34 #10 0x55d5577a0e4b in R_doDotCall (/data/localhost/ripley/R/R-clang/bin/exec/R+0x90e4b) #11 0x55d5577a173d in do_dotcall (/data/localhost/ripley/R/R-clang/bin/exec/R+0x9173d) #12 0x55d5577e0273 in bcEval_loop eval.c #13 0x55d5577d983b in bcEval eval.c #14 0x55d5577d8ff4 in Rf_eval (/data/localhost/ripley/R/R-clang/bin/exec/R+0xc8ff4) #15 0x55d5577f1158 in R_execClosure eval.c #16 0x55d5577f064a in applyClosure_core eval.c #17 0x55d5577d9f16 in Rf_applyClosure (/data/localhost/ripley/R/R-clang/bin/exec/R+0xc9f16) #18 0x55d5577d9447 in Rf_eval (/data/localhost/ripley/R/R-clang/bin/exec/R+0xc9447) #19 0x55d5577f64b7 in do_set (/data/localhost/ripley/R/R-clang/bin/exec/R+0xe64b7) #20 0x55d5577d921f in Rf_eval (/data/localhost/ripley/R/R-clang/bin/exec/R+0xc921f) #21 0x55d557826777 in Rf_ReplIteration (/data/localhost/ripley/R/R-clang/bin/exec/R+0x116777) #22 0x55d55782827e in run_Rmainloop (/data/localhost/ripley/R/R-clang/bin/exec/R+0x11827e) #23 0x55d5578282ea in Rf_mainloop (/data/localhost/ripley/R/R-clang/bin/exec/R+0x1182ea) #24 0x55d557711db7 in main (/data/localhost/ripley/R/R-clang/bin/exec/R+0x1db7) #25 0x7f878850b680 in __libc_start_call_main (/lib64/libc.so.6+0x3680) (BuildId: 17f2e1fd905f485786f6fd6e3bede4ad737137e7) #26 0x7f878850b797 in __libc_start_main@GLIBC_2.2.5 (/lib64/libc.so.6+0x3797) (BuildId: 17f2e1fd905f485786f6fd6e3bede4ad737137e7) #27 0x55d557711cd4 in _start (/data/localhost/ripley/R/R-clang/bin/exec/R+0x1cd4) SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /usr/local/clang22me/bin/../include/c++/v1/__string/constexpr_c_functions.h:227:33 Reporting top 8 outliers [out of 8 found] row [531] - suspicious column: [hypopituitary] - suspicious value: [TRUE] distribution: 99.964% different [norm. obs: 2772] row [623] - suspicious column: [age] - suspicious value: [455.00] distribution: 99.964% <= 94.00 - [mean: 51.60] - [sd: 18.98] - [norm. obs: 2770] row [2230] - suspicious column: [T3] - suspicious value: [10.60] distribution: 99.951% <= 7.10 - [mean: 1.98] - [sd: 0.75] - [norm. obs: 2050] given: [query.hyperthyroid] = [FALSE] row [1138] - suspicious column: [age] - suspicious value: [75.00] distribution: 95.122% <= 42.00 - [mean: 31.46] - [sd: 5.28] - [norm. obs: 39] given: [pregnant] = [TRUE] row [2211] - suspicious column: [age] - suspicious value: [73.00] distribution: 95.122% <= 42.00 - [mean: 31.46] - [sd: 5.28] - [norm. obs: 39] given: [pregnant] = [TRUE] row [1438] - suspicious column: [FTI] - suspicious value: [394.50] distribution: 99.618% <= 232.08 - [mean: 132.68] - [sd: 28.23] - [norm. obs: 261] given: [TT4] > [123.00] (value: 430.00) [referral.source] != [other] (value: STMW) row [745] - suspicious column: [TT4] - suspicious value: [239.00] distribution: 98.571% <= 177.00 - [mean: 135.23] - [sd: 12.57] - [norm. obs: 69] given: [FTI] between (97.96, 128.12] (value: 112.74) [T4U] > [1.12] (value: 2.12) [age] > [55.00] (value: 87.00) row [1412] - suspicious column: [TT4] - suspicious value: [430.00] distribution: 99.762% <= 230.00 - [mean: 111.88] - [sd: 31.88] - [norm. obs: 420] given: [T3] is NA > > ### extract outlier info as R list > outliers <- extract.training.outliers(model) > summary(outliers) Outlier outputs from 2772 rows [8 of which are outliers] Reporting top 8 outliers [out of 8 found] row [531] - suspicious column: [hypopituitary] - suspicious value: [TRUE] distribution: 99.964% different [norm. obs: 2772] row [623] - suspicious column: [age] - suspicious value: [455.00] distribution: 99.964% <= 94.00 - [mean: 51.60] - [sd: 18.98] - [norm. obs: 2770] row [2230] - suspicious column: [T3] - suspicious value: [10.60] distribution: 99.951% <= 7.10 - [mean: 1.98] - [sd: 0.75] - [norm. obs: 2050] given: [query.hyperthyroid] = [FALSE] row [1138] - suspicious column: [age] - suspicious value: [75.00] distribution: 95.122% <= 42.00 - [mean: 31.46] - [sd: 5.28] - [norm. obs: 39] given: [pregnant] = [TRUE] row [2211] - suspicious column: [age] - suspicious value: [73.00] distribution: 95.122% <= 42.00 - [mean: 31.46] - [sd: 5.28] - [norm. obs: 39] given: [pregnant] = [TRUE] row [1438] - suspicious column: [FTI] - suspicious value: [394.50] distribution: 99.618% <= 232.08 - [mean: 132.68] - [sd: 28.23] - [norm. obs: 261] given: [TT4] > [123.00] (value: 430.00) [referral.source] != [other] (value: STMW) row [745] - suspicious column: [TT4] - suspicious value: [239.00] distribution: 98.571% <= 177.00 - [mean: 135.23] - [sd: 12.57] - [norm. obs: 69] given: [FTI] between (97.96, 128.12] (value: 112.74) [T4U] > [1.12] (value: 2.12) [age] > [55.00] (value: 87.00) row [1412] - suspicious column: [TT4] - suspicious value: [430.00] distribution: 99.762% <= 230.00 - [mean: 111.88] - [sd: 31.88] - [norm. obs: 420] given: [T3] is NA > > ### information for row 745 (list of lists) > outliers[[745]] $suspicous_value $suspicous_value$column [1] "TT4" $suspicous_value$value [1] 239 $suspicous_value$decimals [1] 0 $group_statistics $group_statistics$upper_thr [1] 177 $group_statistics$pct_below [1] 0.9857143 $group_statistics$mean [1] 135.2319 $group_statistics$sd [1] 12.57114 $group_statistics$n_obs [1] 69 $conditions $conditions[[1]] $conditions[[1]]$column [1] "age" $conditions[[1]]$value_this [1] 87 $conditions[[1]]$decimals [1] 0 $conditions[[1]]$comparison [1] ">" $conditions[[1]]$value_comp [1] 55 $conditions[[2]] $conditions[[2]]$column [1] "T4U" $conditions[[2]]$decimals [1] 1 $conditions[[2]]$value_this [1] 2.12 $conditions[[2]]$comparison [1] ">" $conditions[[2]]$value_comp [1] 1.12 $conditions[[3]] $conditions[[3]]$column [1] "FTI" $conditions[[3]]$decimals [1] 0 $conditions[[3]]$value_this [1] 112.7358 $conditions[[3]]$comparison [1] ">" $conditions[[3]]$value_comp [1] 97.95918 $conditions[[4]] $conditions[[4]]$column [1] "FTI" $conditions[[4]]$decimals [1] 0 $conditions[[4]]$value_this [1] 112.7358 $conditions[[4]]$comparison [1] "<=" $conditions[[4]]$value_comp [1] 128.125 $tree_depth [1] 4 $uses_NA_branch [1] FALSE $outlier_score [1] 0.01221617 > > ### outliers can be sliced too > outliers[700:1000] Reporting top 1 outliers [out of 1 found] row [745] - suspicious column: [TT4] - suspicious value: [239.00] distribution: 98.571% <= 177.00 - [mean: 135.23] - [sd: 12.57] - [norm. obs: 69] given: [FTI] between (97.96, 128.12] (value: 112.74) [T4U] > [1.12] (value: 2.12) [age] > [55.00] (value: 87.00) > > ### use custom row names > df.w.names <- hypothyroid > row.names(df.w.names) <- paste0("rownum", 1:nrow(hypothyroid)) > outliers.w.names <- predict(model, df.w.names, return_outliers=TRUE, nthreads=1) Reporting top 8 outliers [out of 8 found] row [rownum531] - suspicious column: [hypopituitary] - suspicious value: [TRUE] distribution: 99.964% different [norm. obs: 2772] row [rownum623] - suspicious column: [age] - suspicious value: [455.00] distribution: 99.964% <= 94.00 - [mean: 51.60] - [sd: 18.98] - [norm. obs: 2770] row [rownum2230] - suspicious column: [T3] - suspicious value: [10.60] distribution: 99.951% <= 7.10 - [mean: 1.98] - [sd: 0.75] - [norm. obs: 2050] given: [query.hyperthyroid] = [FALSE] row [rownum1138] - suspicious column: [age] - suspicious value: [75.00] distribution: 95.122% <= 42.00 - [mean: 31.46] - [sd: 5.28] - [norm. obs: 39] given: [pregnant] = [TRUE] row [rownum2211] - suspicious column: [age] - suspicious value: [73.00] distribution: 95.122% <= 42.00 - [mean: 31.46] - [sd: 5.28] - [norm. obs: 39] given: [pregnant] = [TRUE] row [rownum1412] - suspicious column: [FTI] - suspicious value: [394.50] distribution: 99.618% <= 232.08 - [mean: 132.68] - [sd: 28.23] - [norm. obs: 261] given: [TT4] > [123.00] (value: 430.00) [referral.source] != [other] (value: STMW) row [rownum1438] - suspicious column: [FTI] - suspicious value: [394.50] distribution: 99.618% <= 232.08 - [mean: 132.68] - [sd: 28.23] - [norm. obs: 261] given: [TT4] > [123.00] (value: 430.00) [referral.source] != [other] (value: STMW) row [rownum745] - suspicious column: [TT4] - suspicious value: [239.00] distribution: 98.571% <= 177.00 - [mean: 135.23] - [sd: 12.57] - [norm. obs: 69] given: [FTI] between (97.96, 128.12] (value: 112.74) [T4U] > [1.12] (value: 2.12) [age] > [55.00] (value: 87.00) > outliers.w.names[["rownum745"]] $suspicous_value $suspicous_value$column [1] "TT4" $suspicous_value$value [1] 239 $suspicous_value$decimals [1] 0 $group_statistics $group_statistics$upper_thr [1] 177 $group_statistics$pct_below [1] 0.9857143 $group_statistics$mean [1] 135.2319 $group_statistics$sd [1] 12.57114 $group_statistics$n_obs [1] 69 $conditions $conditions[[1]] $conditions[[1]]$column [1] "age" $conditions[[1]]$value_this [1] 87 $conditions[[1]]$decimals [1] 0 $conditions[[1]]$comparison [1] ">" $conditions[[1]]$value_comp [1] 55 $conditions[[2]] $conditions[[2]]$column [1] "T4U" $conditions[[2]]$decimals [1] 0 $conditions[[2]]$value_this [1] 2.12 $conditions[[2]]$comparison [1] ">" $conditions[[2]]$value_comp [1] 1.12 $conditions[[3]] $conditions[[3]]$column [1] "FTI" $conditions[[3]]$decimals [1] 0 $conditions[[3]]$value_this [1] 112.7358 $conditions[[3]]$comparison [1] ">" $conditions[[3]]$value_comp [1] 97.95918 $conditions[[4]] $conditions[[4]]$column [1] "FTI" $conditions[[4]]$decimals [1] 0 $conditions[[4]]$value_this [1] 112.7358 $conditions[[4]]$comparison [1] "<=" $conditions[[4]]$value_comp [1] 128.125 $tree_depth [1] 4 $uses_NA_branch [1] FALSE $outlier_score [1] 0.01221617 > > > > cleanEx() > nameEx("predict.outliertree") > ### * predict.outliertree > > flush(stderr()); flush(stdout()) > > ### Name: predict.outliertree > ### Title: Predict method for Outlier Tree > ### Aliases: predict.outliertree > > ### ** Examples > > library(outliertree) > ### random data frame with an obvious outlier > nrows = 100 > set.seed(1) > df = data.frame( + numeric_col1 = c(rnorm(nrows - 1), 1e6), + numeric_col2 = rgamma(nrows, 1), + categ_col = sample(c('categA', 'categB', 'categC'), + size = nrows, replace = TRUE) + ) > > ### test data frame with another obvious outlier > nrows_test = 50 > df_test = data.frame( + numeric_col1 = rnorm(nrows_test), + numeric_col2 = c(-1e6, rgamma(nrows_test - 1, 1)), + categ_col = sample(c('categA', 'categB', 'categC'), + size = nrows_test, replace = TRUE) + ) > > ### fit model on training data > outliers_model = outlier.tree(df, outliers_print=FALSE, nthreads=1) > > ### find the test outlier > test_outliers = predict(outliers_model, df_test, + outliers_print = 1, return_outliers = TRUE, + nthreads = 1) Reporting top 1 outliers [out of 1 found] row [1] - suspicious column: [numeric_col2] - suspicious value: [-1000000.00] distribution: 100.000% >= 0.02 - [mean: 0.89] - [sd: 0.84] - [norm. obs: 100] > > ### retrieve the outlier info (for row 1) as an R list > test_outliers[[1]] $suspicous_value $suspicous_value$column [1] "numeric_col2" $suspicous_value$value [1] -1e+06 $suspicous_value$decimals [1] 0 $group_statistics $group_statistics$lower_thr [1] 0.02013955 $group_statistics$pct_above [1] 1 $group_statistics$mean [1] 0.8945472 $group_statistics$sd [1] 0.8350289 $group_statistics$n_obs [1] 100 $conditions list() $tree_depth [1] 0 $uses_NA_branch [1] FALSE $outlier_score [1] 6.97272e-13 > > ### to turn it into a 6-column table: > # dt = t(data.table::as.data.table(test_outliers)) > > > > cleanEx() > nameEx("print.outlieroutputs") > ### * print.outlieroutputs > > flush(stderr()); flush(stdout()) > > ### Name: print.outlieroutputs > ### Title: Print outliers in human-readable format > ### Aliases: print.outlieroutputs > > ### ** Examples > > ### Example re-printing results for selected rows > library(outliertree) > data("hypothyroid") > > ### Fit model > otree <- outlier.tree(hypothyroid, + nthreads=1, + outliers_print=0) > > ### Store predictions > pred <- predict(otree, + hypothyroid, + outliers_print=0, + return_outliers=TRUE, + nthreads=1) > > ### Print stored predictions > ### Row 531 is an outlier, but 532 is not > print(pred, only_these_rows = c(531, 532)) Reporting top 1 outliers [out of 1 found] row [531] - suspicious column: [hypopituitary] - suspicious value: [TRUE] distribution: 99.964% different [norm. obs: 2772] > > > > ### *