Since package version 0.2 you can also trim the whole list of
measurements by hand by using the function trim_manually
.
When using automatic trimming, it sometimes fails to detect the starting
or ending point within the density profile. Failing to detect ending
point is usually a consequence of the profile being bark-to-pith instead
of bark-to-bark. In those cases (an others) you can trim the measurement
by hand - either correcting failed automatic trimmings with
correct_failures
or manually for the whole sample
(trim_manually
).
Load the library, a few density profiles and try to trim them automatically:
library(densitr)
dp.list <- dpload(dp.directory = system.file("extdata", package = "densitr"))
#> found 15 density profiles, loading...
#> loaded 15 density profiles
dp.trimmed <- dptriml(dp.list)
#> started trimming 15 files
#> ########################################
#> trimming report:
#> analysed 15 file(s)
#> start detection failed in: 0 file(s)
#> end detection failed in: 6 file(s).
#> ########################################
#> end fail(s):
#> 00050045, 00050046, 00050012, 00050013, 00050036, 00050038
As you can see from the output above, the automatic trim detection of endings failed in 6 files, while no failures occurred in start detection.
In such cases, inspect the failed measurements by hand using
dptrim
, or by calling either dpdetect_s
or
dpdetect_e
and using the argument
return.plot = TRUE
. You can also just plot it using
plot
.
dptrim(dp.list[["00050045"]], return.plot = TRUE)
#> Warning in dpdetect_e(dp, ...): end not detected in file 00050045
As seen from the plot, end detection failed due to the large increase in values towards the ending part of the profile.
In such cases or where you want to make a manual correction, you can
use manual_trim_detect
on an individual profile or
trim_manually
on list of density profiles. This will plot
that profile and you can click on the plot to select the desired
position. After selecting the point, your selection will be drawn on the
plot. The function will also fail if your graphics device is something
other than X11, windows or quartz.
It is also possible to correct a whole set of trim failures
sequentially by calling correct_failures
on a list of
trimmed profiles. In order for this to work, you have to call the
dptriml
or dptriml_s
with the argument
rreport = TRUE
, which returns a list containing all trimmed
profiles and a data frame with the trimming report.
correct_failures
will then separate the trim failures and
run manual_trim_detect
on all failures sequentially, asking
you to pick a start or end for each failed profile. It will
automatically subset the failed profiles and return a complete list of
trimmed profiles, both those trimmed automatically and those trimmed
manually.
You can also just remove the trim failures from the list of trimmed
profiles by calling remove_trim_failures
on that list, it
will return only those where there were no failures. Failures can also
be separated out by calling separate_trim_failures
on a
list of automatically trimmed profiles, which return two lists, one
containing start failures and one containing end failures.
dp.trimmed <- dptriml(dp.list, rreport = TRUE)
#> started trimming 15 files
#> ########################################
#> trimming report:
#> analysed 15 file(s)
#> start detection failed in: 0 file(s)
#> end detection failed in: 6 file(s).
#> ########################################
#> end fail(s):
#> 00050045, 00050046, 00050012, 00050013, 00050036, 00050038
dp.successful <- remove_trim_failures(dp.trimmed)
length(dp.successful)
#> [1] 9
dp.failed <- separate_trim_failures(dp.trimmed)
length(dp.failed$failures.end)
#> [1] 6
Trim failures can also be ignored in some cases. For example, if trimming both beginning and end, end trimming will sometimes fail due to the profile being bark-to-pith and not bark-to-bark. Plot the failures and inspect them before disregarding them, if no manual corrections are being done.