Impute numerical features by histogram.

During training, a histogram is fitted on each column using R's `hist()`

function.
The fitted histogram is then sampled from for imputation. Sampling happens in a two-step process:
First, a bin is sampled from the histogram, then a value is sampled uniformly from the bin.
This is an approximation to sampling from the empirical training data distribution (i.e. sampling
from training data with replacement), but is much more memory efficient for large datasets, since the `$state`

does not need to save the training data.

## Format

`R6Class`

object inheriting from `PipeOpImpute`

/`PipeOp`

.

## Construction

`id`

::`character(1)`

Identifier of resulting object, default`"imputehist"`

.`param_vals`

:: named`list`

List of hyperparameter settings, overwriting the hyperparameter settings that would otherwise be set during construction. Default`list()`

.

## Input and Output Channels

Input and output channels are inherited from `PipeOpImpute`

.

The output is the input `Task`

with all affected numeric features missing values imputed by (column-wise) histogram; see Description for details.

## State

The `$state`

is a named `list`

with the `$state`

elements inherited from `PipeOpImpute`

.

The `$state$model`

is a named `list`

of `list`

s containing elements `$counts`

and `$breaks`

.

## Parameters

The parameters are the parameters inherited from `PipeOpImpute`

.

## Internals

Uses the `graphics::hist()`

function. Features that are entirely `NA`

are imputed as `0`

.

## Methods

Only methods inherited from `PipeOpImpute`

/`PipeOp`

.

## See also

https://mlr-org.com/pipeops.html

Other PipeOps:
`PipeOp`

,
`PipeOpEnsemble`

,
`PipeOpImpute`

,
`PipeOpTargetTrafo`

,
`PipeOpTaskPreproc`

,
`PipeOpTaskPreprocSimple`

,
`mlr_pipeops`

,
`mlr_pipeops_adas`

,
`mlr_pipeops_blsmote`

,
`mlr_pipeops_boxcox`

,
`mlr_pipeops_branch`

,
`mlr_pipeops_chunk`

,
`mlr_pipeops_classbalancing`

,
`mlr_pipeops_classifavg`

,
`mlr_pipeops_classweights`

,
`mlr_pipeops_colapply`

,
`mlr_pipeops_collapsefactors`

,
`mlr_pipeops_colroles`

,
`mlr_pipeops_copy`

,
`mlr_pipeops_datefeatures`

,
`mlr_pipeops_encode`

,
`mlr_pipeops_encodeimpact`

,
`mlr_pipeops_encodelmer`

,
`mlr_pipeops_featureunion`

,
`mlr_pipeops_filter`

,
`mlr_pipeops_fixfactors`

,
`mlr_pipeops_histbin`

,
`mlr_pipeops_ica`

,
`mlr_pipeops_imputeconstant`

,
`mlr_pipeops_imputelearner`

,
`mlr_pipeops_imputemean`

,
`mlr_pipeops_imputemedian`

,
`mlr_pipeops_imputemode`

,
`mlr_pipeops_imputeoor`

,
`mlr_pipeops_imputesample`

,
`mlr_pipeops_kernelpca`

,
`mlr_pipeops_learner`

,
`mlr_pipeops_missind`

,
`mlr_pipeops_modelmatrix`

,
`mlr_pipeops_multiplicityexply`

,
`mlr_pipeops_multiplicityimply`

,
`mlr_pipeops_mutate`

,
`mlr_pipeops_nmf`

,
`mlr_pipeops_nop`

,
`mlr_pipeops_ovrsplit`

,
`mlr_pipeops_ovrunite`

,
`mlr_pipeops_pca`

,
`mlr_pipeops_proxy`

,
`mlr_pipeops_quantilebin`

,
`mlr_pipeops_randomprojection`

,
`mlr_pipeops_randomresponse`

,
`mlr_pipeops_regravg`

,
`mlr_pipeops_removeconstants`

,
`mlr_pipeops_renamecolumns`

,
`mlr_pipeops_replicate`

,
`mlr_pipeops_rowapply`

,
`mlr_pipeops_scale`

,
`mlr_pipeops_scalemaxabs`

,
`mlr_pipeops_scalerange`

,
`mlr_pipeops_select`

,
`mlr_pipeops_smote`

,
`mlr_pipeops_smotenc`

,
`mlr_pipeops_spatialsign`

,
`mlr_pipeops_subsample`

,
`mlr_pipeops_targetinvert`

,
`mlr_pipeops_targetmutate`

,
`mlr_pipeops_targettrafoscalerange`

,
`mlr_pipeops_textvectorizer`

,
`mlr_pipeops_threshold`

,
`mlr_pipeops_tunethreshold`

,
`mlr_pipeops_unbranch`

,
`mlr_pipeops_updatetarget`

,
`mlr_pipeops_vtreat`

,
`mlr_pipeops_yeojohnson`

Other Imputation PipeOps:
`PipeOpImpute`

,
`mlr_pipeops_imputeconstant`

,
`mlr_pipeops_imputelearner`

,
`mlr_pipeops_imputemean`

,
`mlr_pipeops_imputemedian`

,
`mlr_pipeops_imputemode`

,
`mlr_pipeops_imputeoor`

,
`mlr_pipeops_imputesample`

## Examples

```
library("mlr3")
task = tsk("pima")
task$missings()
#> diabetes age glucose insulin mass pedigree pregnant pressure
#> 0 0 5 374 11 0 0 35
#> triceps
#> 227
po = po("imputehist")
new_task = po$train(list(task = task))[[1]]
new_task$missings()
#> diabetes age pedigree pregnant glucose insulin mass pressure
#> 0 0 0 0 0 0 0 0
#> triceps
#> 0
po$state$model
#> $age
#> $age$counts
#> [1] 267 150 81 76 76 37 31 23 14 11 1 0 1
#>
#> $age$breaks
#> [1] 20 25 30 35 40 45 50 55 60 65 70 75 80 85
#>
#>
#> $glucose
#> $glucose$counts
#> [1] 4 38 167 205 157 91 60 41
#>
#> $glucose$breaks
#> [1] 40 60 80 100 120 140 160 180 200
#>
#>
#> $insulin
#> $insulin$counts
#> [1] 151 158 48 17 11 6 1 1 1
#>
#> $insulin$breaks
#> [1] 0 100 200 300 400 500 600 700 800 900
#>
#>
#> $mass
#> $mass$counts
#> [1] 14 98 180 221 148 61 27 5 2 0 1
#>
#> $mass$breaks
#> [1] 15 20 25 30 35 40 45 50 55 60 65 70
#>
#>
#> $pedigree
#> $pedigree$counts
#> [1] 128 282 154 99 54 22 16 4 4 1 1 2 1
#>
#> $pedigree$breaks
#> [1] 0.0 0.2 0.4 0.6 0.8 1.0 1.2 1.4 1.6 1.8 2.0 2.2 2.4 2.6
#>
#>
#> $pregnant
#> $pregnant$counts
#> [1] 349 143 107 83 52 20 12 1 1
#>
#> $pregnant$breaks
#> [1] 0 2 4 6 8 10 12 14 16 18
#>
#>
#> $pressure
#> $pressure$counts
#> [1] 3 2 24 94 217 228 127 25 11 1 1
#>
#> $pressure$breaks
#> [1] 20 30 40 50 60 70 80 90 100 110 120 130
#>
#>
#> $triceps
#> $triceps$counts
#> [1] 9 115 179 164 65 7 1 0 0 1
#>
#> $triceps$breaks
#> [1] 0 10 20 30 40 50 60 70 80 90 100
#>
#>
```