
Create an application file for the given list of models
Source:R/proximate_write_nax.R
proximate_write_nax.RdThis function provides a flexible way to create an application file (.nax) which can be deployed into ProxiMate sensors.
Usage
proximate_write_nax(object, path, metadata, tsv_name, empty_tsv_name,
spc = "spc", external_properties = NULL, report = TRUE,
verbose = TRUE, internal_prj_path = NULL)Arguments
- object
a list of objects of class
spectral_model, as generated bycalibrate. Note that at least one of these models must contain the relevant input data (i.e. run withreturn_inputs = TRUEincalibratemethod).- path
a character for the directory in which the file should be produced.
- metadata
an object of class
application_metadata, as generated byadd_application_metadata. If not provided (andobjectdoes not contain the metadata either), default values are used with a warning.- tsv_name
an optional character. If not supplied, this parameter is set to the name of the application plus the current date. See details.
- empty_tsv_name
an optional character. For ProxiMate applications, this argument should be different to
tsv_nameor it cannot be imported into the device. If missing, is set to the name of the application. See details.- spc
a character to indicate the column name of the spectra used in the data provided to the
objectlist of models. This parameter is passed to theproximate_write_datamethod. Defaults to"spc".- external_properties
a list for additional files to be included in the application file. Defaults to
NULL. See details for how these files may be added.- report
a logical. Should reports of the models be generated and added to the file? Defaults to
TRUE.- verbose
a logical indicating whether progress bars during the creation of the file should be printed. Defaults to
TRUE.- internal_prj_path
a string. Only used for changing the path printed on the first line of each project file. For almost all cases, this argument can be ignored. The only case where you should adjust this parameter is when you are creating the application (.nax) file in a certain folder, but actually want to move it to another one (e.g. on a different platform). If
NULL(default), the path is set equal topath, with"Calibrations/"added at the end.
Value
Invisibly returns NULL. Called for its side effect of writing
a .nax application file to path.
Details
This function is capable of generating an application (.nax) file, which
contains compressed data files for the application. All files inside this
.nax file are organized in a fixed way, such that they are importable into a
ProxiMate device. For that, all models to be imported should be in a list,
and each individual model should be generated using the calibrate
function, preferably with the input data saved in it. This can easily be done
by calling the method with return_inputs = TRUE. Note that at least
one model in object must contain input data, otherwise an error will
occur.
Furthermore, note that the data argument in calibrate for
all models in one single application must be from one single data set.
In particular, one single data.frame must suffice to describe the inputs
of all models in object. The data that is actually used to train these
models can still be different, e.g. by specifying the rows that you want to
exclude from a certain model (see skip argument of calibrate).
An error will be thrown if this is not the case.
The directory path is created automatically (if it does not exist).
Inside, the application file is generated, which contains the following
compressed files: a file for the metadata (.nad), project (.prj) and
calibration (.cal) files for all the provided models in object,
possibly report (.rtf) files (as indicated by the report argument),
a tab-separated value (.tsv) file of the spectral data, and an empty
tab-separated value (.tsv) file.
The metadata file (.nad) is required for a successful import of the
application into a ProxiMate device. This requires metadata in every model,
which should be added using add_model_metadata prior
to the call of this function. Otherwise, default values for the model metadata
will be used with a warning. Furthermore, application specific metadata is
required, which can be either specified by providing the argument metadata,
or included in the list of models object (see add_application_metadata),
where the former option will take precedence.
If neither option is available, default values of add_application_metadata
are used with a warning.
Furthermore, this function provides a way of adding separately
generated project and calibration files through the parameter
external_properties. Note that these files have to be either in the
directory of the provided path or in a sub-directory "Calibrations"
thereof. External properties must be provided as a list containing model metadata
(using the add_model_metadata method) in order to be added properly
to the application file.
These external files must also be named according to the naming convention of
the rest of the models used. In particular, the function searches the
provided path and the sub-directory "Calibrations" for files named with
the following format: app_name.property_name.cal, app_name.property_name.prj
and (if report is TRUE) app_name.property_name.rtf, where
the app_name is taken from the application metadata, and the property_name
from model metadata passed to external_properties. If the files cannot be
found, a warning will be displayed.
An example for adding an external property is given in the example section below.
Note that if an application file for the given application already exists, the files inside the compressed application file are updated, but already present files are not deleted.
Examples
# \donttest{
data("NIRcannabis")
control <- calibration_control(validation_type = "kfold", number = 3, folds = "sequential")
# Models for application files must have model metadata!
model_metadata <- add_model_metadata(unit = "%")
modell <- calibrate(CBDA ~ spc,
data = NIRcannabis, preprocess = preprocess_recipe(),
method = fit_plsr(15), control = control,
metadata = model_metadata, verbose = FALSE
)
app_metadata <- add_application_metadata(name = "app")
proximate_write_nax(
object = list(modell),
path = tempdir(),
metadata = app_metadata,
tsv_name = "some_tsv",
empty_tsv_name = "another_tsv",
report = TRUE,
verbose = FALSE
)
# Another model
modelr <- calibrate(THCA ~ spc,
data = NIRcannabis, preprocess = preprocess_recipe(),
method = fit_plsr(15), control = control,
metadata = model_metadata, verbose = FALSE
)
# Generate some files to be added separately
proximate_write_model(
object = list(modelr),
path = tempdir(),
tsv_paths = tempdir(),
application_name = "app",
cal = TRUE, prj = TRUE, rtf = TRUE,
verbose = FALSE
)
# Now add them using external properties. Requires a name for the property!
proximate_write_nax(
object = list(modell),
path = tempdir(),
metadata = app_metadata,
tsv_name = "some_tsv",
empty_tsv_name = "another_tsv",
external_properties = list(add_model_metadata(unit = "%", name = "THCA")),
report = TRUE,
verbose = FALSE
)
# }