warbleR: Annotation data format
Marcelo Araya-Salas, PhD
2024-03-01
Source:vignettes/annotation_data_format.Rmd
annotation_data_format.Rmd
This vignette explains in detail the structure of the R data objects containing sound file annotations that are required by the package warbleR.
An annotation table (or selection table in Raven’s and warbleR’s terminology) is a data set that contains information about the location in time (and sometimes in frequency) of the sounds of interest in one or more sound files. warbleR can take sound file annotations represented in the following R objects:
- Data frames
- Selection tables
- Extended selection tables
The last 2 are annotation specific R classes included in warbleR. Here we described the basic structure of these objects and how they can be created.
Data frames
Data frames with sound file annotations must contain the following columns:
- ‘sound.files’: character or factor column name of the sound files including the file extension (e.g. “rec_1.wav”)
- ‘selec’: numeric, character or factor column with a unique identifier (at least within each sound file) for each annotation (e.g. 1, 2, 3 or “a”, “b”, “c”)
- ‘start’: the start position in time of an annotated sound (in seconds)
- ‘end’: the end position in time of an annotated sound (in seconds)
sound.files | selec | start | end |
---|---|---|---|
sound_file_1.wav | 1 | 3.02 | 5.58 |
sound_file_1.wav | 2 | 7.92 | 9.00 |
sound_file_2.wav | 1 | 4.21 | 5.34 |
sound_file_2.wav | 2 | 8.85 | 11.57 |
Data frames containing annotations can also include the following optional columns:
- ‘bottom.freq’: numeric column with the bottom frequency of the frequency range of the annotation (in kHz)
- ‘top.freq’: numeric column with the top frequency of the frequency range of the annotation (in kHz)
- ‘channel’: numeric column with the number of the channel in which the annotation is found in a multi-channel sound file (by default is 1)
sound.files | selec | start | end | bottom.freq | top.freq | channel |
---|---|---|---|---|---|---|
sound_file_1.wav | 1 | 3.02 | 5.58 | 5.46 | 10.22 | 1 |
sound_file_1.wav | 2 | 7.92 | 9.00 | 3.73 | 9.36 | 1 |
sound_file_2.wav | 1 | 4.21 | 5.34 | 4.31 | 9.40 | 1 |
sound_file_2.wav | 2 | 8.85 | 11.57 | 4.55 | 9.11 | 1 |
The sample data “lbh_selec_table” contains a data frame with annotations with the format expected by warbleR:
sound.files | channel | selec | start | end | bottom.freq | top.freq |
---|---|---|---|---|---|---|
Phae.long1.wav | 1 | 1 | 1.169 | 1.342 | 2.22 | 8.60 |
Phae.long1.wav | 1 | 2 | 2.158 | 2.321 | 2.17 | 8.81 |
Phae.long1.wav | 1 | 3 | 0.343 | 0.518 | 2.22 | 8.76 |
Phae.long2.wav | 1 | 1 | 0.160 | 0.292 | 2.32 | 8.82 |
Phae.long2.wav | 1 | 2 | 1.457 | 1.583 | 2.28 | 8.89 |
Phae.long3.wav | 1 | 1 | 0.627 | 0.758 | 3.01 | 8.82 |
Phae.long3.wav | 1 | 2 | 1.974 | 2.104 | 2.78 | 8.89 |
Phae.long3.wav | 1 | 3 | 0.123 | 0.255 | 2.32 | 9.31 |
Phae.long4.wav | 1 | 1 | 1.517 | 1.662 | 2.51 | 9.22 |
Phae.long4.wav | 1 | 2 | 2.933 | 3.077 | 2.58 | 10.23 |
Phae.long4.wav | 1 | 3 | 0.145 | 0.290 | 2.58 | 9.74 |
Typically, annotations are created in other sound analysis programs
(mainly, Raven, Avisoft, Syrinx and Audacity) and then imported into
R. We recommend annotating sound files in Raven
sound analysis software (Cornell Lab of Ornithology) and
then importing them into R with the package Rraven.
This package facilitates data exchange between R and Raven
sound analysis software and allow users to import annotation data
into R using the warbleR annotation format (see
argument ‘warbler.format’ in the function imp_raven()
).
Data frames containing annotations always refer to sound files. Therefore, when using data frames users must always indicate the location of the sound files to every warbleR function when providing annotations in this format.
warbleR annotation formats
Selection tables
These objects are created with the selection_table()
function. The function takes data frames containing annotation data as
in the format described above. Therefore the same mandatory and optional
columns are used by selection tables. The function verifies if the
information is consistent (see the function check_sels()
for details) and saves the ‘diagnostic’ metadata as an attribute in the
output object. Selection tables are basically data frames in which the
information contained has been double checked to ensure it can be read
by other warbleR functions.
Selection tables are created by the function
selection_table()
:
# write example sound files in temporary directory
writeWave(Phae.long1, file.path(tempdir(), "Phae.long1.wav"))
writeWave(Phae.long2, file.path(tempdir(), "Phae.long2.wav"))
writeWave(Phae.long3, file.path(tempdir(), "Phae.long3.wav"))
writeWave(Phae.long4, file.path(tempdir(), "Phae.long4.wav"))
st <-
selection_table(X = lbh_selec_table, path = tempdir())
knitr::kable(st)
sound.files | channel | selec | start | end | bottom.freq | top.freq |
---|---|---|---|---|---|---|
Phae.long1.wav | 1 | 1 | 1.169 | 1.342 | 2.22 | 8.60 |
Phae.long1.wav | 1 | 2 | 2.158 | 2.321 | 2.17 | 8.81 |
Phae.long1.wav | 1 | 3 | 0.343 | 0.518 | 2.22 | 8.76 |
Phae.long2.wav | 1 | 1 | 0.160 | 0.292 | 2.32 | 8.82 |
Phae.long2.wav | 1 | 2 | 1.457 | 1.583 | 2.28 | 8.89 |
Phae.long3.wav | 1 | 1 | 0.627 | 0.758 | 3.01 | 8.82 |
Phae.long3.wav | 1 | 2 | 1.974 | 2.104 | 2.78 | 8.89 |
Phae.long3.wav | 1 | 3 | 0.123 | 0.255 | 2.32 | 9.31 |
Phae.long4.wav | 1 | 1 | 1.517 | 1.662 | 2.51 | 9.22 |
Phae.long4.wav | 1 | 2 | 2.933 | 3.077 | 2.58 | 10.23 |
Phae.long4.wav | 1 | 3 | 0.145 | 0.290 | 2.58 | 9.74 |
Selection table is an especific object class that have their own printing method:
class(st)
[1] "selection_table" "data.frame"
st
[30mObject of class
[1m'selection_table'
[22m
[39m
[90m* The output of the following call:
[39m
[90m
[3mselection_table(X = lbh_selec_table, path = tempdir(), pb = FALSE)
[23m
[39m
[90m
[1m
Contains:
[22m * A selection table data frame with 11 rows and 7 columns:
[39m
[90m|sound.files | channel| selec| start| end| bottom.freq|
[39m
[90m|:--------------|-------:|-----:|-----:|-----:|-----------:|
[39m
[90m|Phae.long1.wav | 1| 1| 1.169| 1.342| 2.22|
[39m
[90m|Phae.long1.wav | 1| 2| 2.158| 2.321| 2.17|
[39m
[90m|Phae.long1.wav | 1| 3| 0.343| 0.518| 2.22|
[39m
[90m|Phae.long2.wav | 1| 1| 0.160| 0.292| 2.32|
[39m
[90m|Phae.long2.wav | 1| 2| 1.457| 1.583| 2.28|
[39m
[90m|Phae.long3.wav | 1| 1| 0.627| 0.758| 3.01|
[39m
[90m... 1 more column(s) (top.freq)
[39m
[90m and 5 more row(s)
[39m
[90m
* A data frame (check.results) with 11 rows generated by check_sels() (as attribute)
[39m
[90mcreated by warbleR 1.1.30
[39m
Note that the path to the sound files must be provided. This is necessary in order to verify that the data provided conforms to the characteristics of the audio files.
Selection table also refer to sound files. Therefore, users must always indicate the location of the sound files to every warbleR function when providing annotations in this format
Extended selection tables
Extended selection tables are annotations that include both the acoustic and annotation data. This an specific object class, extended_selection_table, that include a list of ‘wave’ objects corresponding to each of the selections in the data. Therefore, the function transforms the selection table into self-contained objects since the original sound files are no longer needed to perform most of the acoustic analysis in warbleR. This can facilitate the storage and exchange of (bio)acoustic data. This format can also speed up analyses, since it is not necessary to read the sound files every time the data is analyzed.
The selection_table()
function also creates extended
selection tables. To do this, users must set the argument
extended = TRUE
(otherwise, the class would be a selection
table). The following code converts the exaample ‘lbh_selec_table’ data
into an extended selection table:
ext_st <- selection_table(X = lbh_selec_table, pb = FALSE,
extended = TRUE, path = tempdir())
Extended selection table is an especific object class that have their own printing method:
class(ext_st)
[1] "extended_selection_table" "data.frame"
ext_st
[30mObject of class
[1m'extended_selection_table'
[22m
[39m
[90m* The output of the following call:
[39m
[90m
[3mselection_table(X = lbh_selec_table, path = tempdir(), extended = TRUE, pb = FALSE)
[23m
[39m
[90m
[1m
Contains:
[22m
* A selection table data frame with 11 row(s) and 7 columns:
[39m
[90m|sound.files | channel| selec| start| end| bottom.freq|
[39m
[90m|:----------------|-------:|-----:|-----:|-----:|-----------:|
[39m
[90m|Phae.long1.wav_1 | 1| 1| 0.1| 0.273| 2.22|
[39m
[90m|Phae.long1.wav_2 | 1| 1| 0.1| 0.263| 2.17|
[39m
[90m|Phae.long1.wav_3 | 1| 1| 0.1| 0.275| 2.22|
[39m
[90m|Phae.long2.wav_1 | 1| 1| 0.1| 0.233| 2.32|
[39m
[90m|Phae.long2.wav_2 | 1| 1| 0.1| 0.226| 2.28|
[39m
[90m|Phae.long3.wav_1 | 1| 1| 0.1| 0.231| 3.01|
[39m
[90m... 1 more column(s) (top.freq)
[39m
[90m and 5 more row(s)
[39m
[90m
* 11 wave object(s) (as attributes):
[39m
[90mPhae.long1.wav_1, Phae.long1.wav_2, Phae.long1.wav_3, Phae.long2.wav_1, Phae.long2.wav_2, Phae.long3.wav_1
[39m
[90m... and 5 more
[39m
[90m
* A data frame (check.results) with 11 rows generated by check_sels() (as attribute)
[39m
[90m
The selection table was created
[3m
[1m by element
[22m
[23m(see 'class_extended_selection_table')
[39m
[90m* 1 sampling rate(s) (in kHz):
[1m22.5
[22m
[39m
[90m* 1 bit depth(s):
[1m16
[22m
[39m
[90m* Created by warbleR 1.1.30
[39m
Handling extended selection tables
Several functions can be used to deal with objects of this class. First can test if the object belongs to the extended_selection_table:
is_extended_selection_table(ext_st)
[1] TRUE
You can subset the selection in the same way that any other data frame and it will still keep its attributes:
ext_st2 <- ext_st[1:2, ]
is_extended_selection_table(ext_st2)
[1] TRUE
There is also a generic version of print()
for this
class of objects:
## print
print(ext_st)
[30mObject of class
[1m'extended_selection_table'
[22m
[39m
[90m* The output of the following call:
[39m
[90m
[3mselection_table(X = lbh_selec_table, path = tempdir(), extended = TRUE, pb = FALSE)
[23m
[39m
[90m
[1m
Contains:
[22m
* A selection table data frame with 11 row(s) and 7 columns:
[39m
[90m|sound.files | channel| selec| start| end| bottom.freq|
[39m
[90m|:----------------|-------:|-----:|-----:|-----:|-----------:|
[39m
[90m|Phae.long1.wav_1 | 1| 1| 0.1| 0.273| 2.22|
[39m
[90m|Phae.long1.wav_2 | 1| 1| 0.1| 0.263| 2.17|
[39m
[90m|Phae.long1.wav_3 | 1| 1| 0.1| 0.275| 2.22|
[39m
[90m|Phae.long2.wav_1 | 1| 1| 0.1| 0.233| 2.32|
[39m
[90m|Phae.long2.wav_2 | 1| 1| 0.1| 0.226| 2.28|
[39m
[90m|Phae.long3.wav_1 | 1| 1| 0.1| 0.231| 3.01|
[39m
[90m... 1 more column(s) (top.freq)
[39m
[90m and 5 more row(s)
[39m
[90m
* 11 wave object(s) (as attributes):
[39m
[90mPhae.long1.wav_1, Phae.long1.wav_2, Phae.long1.wav_3, Phae.long2.wav_1, Phae.long2.wav_2, Phae.long3.wav_1
[39m
[90m... and 5 more
[39m
[90m
* A data frame (check.results) with 11 rows generated by check_sels() (as attribute)
[39m
[90m
The selection table was created
[3m
[1m by element
[22m
[23m(see 'class_extended_selection_table')
[39m
[90m* 1 sampling rate(s) (in kHz):
[1m22.5
[22m
[39m
[90m* 1 bit depth(s):
[1m16
[22m
[39m
[90m* Created by warbleR 1.1.30
[39m
… which is equivalent to:
ext_st
[30mObject of class
[1m'extended_selection_table'
[22m
[39m
[90m* The output of the following call:
[39m
[90m
[3mselection_table(X = lbh_selec_table, path = tempdir(), extended = TRUE, pb = FALSE)
[23m
[39m
[90m
[1m
Contains:
[22m
* A selection table data frame with 11 row(s) and 7 columns:
[39m
[90m|sound.files | channel| selec| start| end| bottom.freq|
[39m
[90m|:----------------|-------:|-----:|-----:|-----:|-----------:|
[39m
[90m|Phae.long1.wav_1 | 1| 1| 0.1| 0.273| 2.22|
[39m
[90m|Phae.long1.wav_2 | 1| 1| 0.1| 0.263| 2.17|
[39m
[90m|Phae.long1.wav_3 | 1| 1| 0.1| 0.275| 2.22|
[39m
[90m|Phae.long2.wav_1 | 1| 1| 0.1| 0.233| 2.32|
[39m
[90m|Phae.long2.wav_2 | 1| 1| 0.1| 0.226| 2.28|
[39m
[90m|Phae.long3.wav_1 | 1| 1| 0.1| 0.231| 3.01|
[39m
[90m... 1 more column(s) (top.freq)
[39m
[90m and 5 more row(s)
[39m
[90m
* 11 wave object(s) (as attributes):
[39m
[90mPhae.long1.wav_1, Phae.long1.wav_2, Phae.long1.wav_3, Phae.long2.wav_1, Phae.long2.wav_2, Phae.long3.wav_1
[39m
[90m... and 5 more
[39m
[90m
* A data frame (check.results) with 11 rows generated by check_sels() (as attribute)
[39m
[90m
The selection table was created
[3m
[1m by element
[22m
[23m(see 'class_extended_selection_table')
[39m
[90m* 1 sampling rate(s) (in kHz):
[1m22.5
[22m
[39m
[90m* 1 bit depth(s):
[1m16
[22m
[39m
[90m* Created by warbleR 1.1.30
[39m
You can also join them in rows. Here the original
extended_selection_table is divided into 2 and bound again
using rbind()
:
ext_st3 <- ext_st[1:5, ]
ext_st4 <- ext_st[6:11, ]
ext_st5 <- rbind(ext_st3, ext_st4)
# print
ext_st5
[30mObject of class
[1m'extended_selection_table'
[22m
[39m
[90m* The output of the following call:
[39m
[90m
[3mrbind(deparse.level, ..1, ..2)
[23m
[39m
[90m
[1m
Contains:
[22m
* A selection table data frame with 11 row(s) and 7 columns:
[39m
[90m|sound.files | channel| selec| start| end| bottom.freq|
[39m
[90m|:----------------|-------:|-----:|-----:|-----:|-----------:|
[39m
[90m|Phae.long1.wav_1 | 1| 1| 0.1| 0.273| 2.22|
[39m
[90m|Phae.long1.wav_2 | 1| 1| 0.1| 0.263| 2.17|
[39m
[90m|Phae.long1.wav_3 | 1| 1| 0.1| 0.275| 2.22|
[39m
[90m|Phae.long2.wav_1 | 1| 1| 0.1| 0.233| 2.32|
[39m
[90m|Phae.long2.wav_2 | 1| 1| 0.1| 0.226| 2.28|
[39m
[90m|Phae.long3.wav_1 | 1| 1| 0.1| 0.231| 3.01|
[39m
[90m... 1 more column(s) (top.freq)
[39m
[90m and 5 more row(s)
[39m
[90m
* 11 wave object(s) (as attributes):
[39m
[90mPhae.long1.wav_1, Phae.long1.wav_2, Phae.long1.wav_3, Phae.long2.wav_1, Phae.long2.wav_2, Phae.long3.wav_1
[39m
[90m... and 5 more
[39m
[90m
* A data frame (check.results) with 11 rows generated by check_sels() (as attribute)
[39m
[90m
The selection table was created
[3m
[1m by element
[22m
[23m(see 'class_extended_selection_table')
[39m
[90m* 1 sampling rate(s) (in kHz):
[1m22.5
[22m
[39m
[90m* 1 bit depth(s):
[1m16
[22m
[39m
[90m* Created by warbleR 1.1.30
[39m
# same annotations
all.equal(ext_st, ext_st5, check.attributes = FALSE)
[1] TRUE
[1] TRUE
The ‘wave’ objects can be read individually using
read_sound_file()
, a wrapper for the
readWave()
function from tuneR, which can
handle extended selection tables:
wv1 <- read_sound_file(X = ext_st, index = 3, from = 0, to = 0.37)
These are regular ‘wave’ objects:
class(wv1)
[1] "Wave"
attr(,"package")
[1] "tuneR"
wv1
Wave Object
Number of Samples: 8325
Duration (seconds): 0.37
Samplingrate (Hertz): 22500
Channels (Mono/Stereo): Mono
PCM (integer format): TRUE
Bit (8/16/24/32/64): 16
spectro(wv1, wl = 150, grid = FALSE, scale = FALSE, ovlp = 90)
par(mfrow = c(3, 2), mar = rep(0, 4))
for (i in 1:6) {
wv <- read_sound_file(X = ext_st, index = i, from = 0.05, to = 0.32)
spectro(wv,
wl = 150, grid = FALSE, scale = FALSE, axisX = FALSE,
axisY = FALSE, ovlp = 90
)
}
The read_sound_file()
function requires a selection
table, as well as the row index (i.e. the row number) to be able to read
the ‘wave’ objects. It can also read a regular ‘wave’ file if the path
is provided.
Note that other functions that modify data frames are likely to delete the attributes in which the ‘wave’ objects and metadata are stored. For example, the merge and the extended selection box will remove its attributes:
# create new data frame
Y <- data.frame(sound.files = ext_st$sound.files, site = "La Selva", lek = c(rep("SUR", 5), rep("CCL", 6)))
# combine
mrg_ext_st <- merge(ext_st, Y, by = "sound.files")
# check class
is_extended_selection_table(mrg_ext_st)
[1] FALSE
In this case, we can use the
fix_extended_selection_table()
function to transfer the
attributes of the original extended selection table:
# fix est
mrg_ext_st <- fix_extended_selection_table(X = mrg_ext_st, Y = ext_st)
# check class
is_extended_selection_table(mrg_ext_st)
[1] TRUE
This works as long as some of the original sound files are retained and no other selections are added.
Finally, these objects can be used as input for most
warbleR functions, without the need of refering to any
sound file. For instance we can easily measure acoustic parameters on
data in extended_selection_table format using the function
spectro_analysis()
:
# parametros espectrales
sp <- spectro_analysis(ext_st)
# check first 10 columns
sp[, 1:10]
sound.files | selec | duration | meanfreq | sd | freq.median | freq.Q25 | freq.Q75 | freq.IQR | time.median |
---|---|---|---|---|---|---|---|---|---|
Phae.long1.wav_1 | 1 | 0.173 | 5.98 | 1.40 | 6.33 | 5.30 | 6.87 | 1.57 | 0.080 |
Phae.long1.wav_2 | 1 | 0.163 | 6.00 | 1.42 | 6.21 | 5.33 | 6.88 | 1.55 | 0.082 |
Phae.long1.wav_3 | 1 | 0.175 | 6.02 | 1.51 | 6.42 | 5.15 | 6.98 | 1.83 | 0.094 |
Phae.long2.wav_1 | 1 | 0.133 | 6.40 | 1.34 | 6.60 | 5.61 | 7.38 | 1.77 | 0.074 |
Phae.long2.wav_2 | 1 | 0.126 | 6.31 | 1.37 | 6.60 | 5.61 | 7.21 | 1.60 | 0.084 |
Phae.long3.wav_1 | 1 | 0.131 | 6.61 | 1.09 | 6.67 | 6.06 | 7.34 | 1.27 | 0.058 |
Phae.long3.wav_2 | 1 | 0.130 | 6.64 | 1.12 | 6.67 | 6.11 | 7.43 | 1.32 | 0.072 |
Phae.long3.wav_3 | 1 | 0.131 | 6.58 | 1.25 | 6.65 | 6.03 | 7.39 | 1.36 | 0.058 |
Phae.long4.wav_1 | 1 | 0.145 | 6.22 | 1.48 | 6.23 | 5.46 | 7.30 | 1.85 | 0.087 |
Phae.long4.wav_2 | 1 | 0.144 | 6.46 | 1.59 | 6.34 | 5.63 | 7.57 | 1.94 | 0.087 |
Phae.long4.wav_3 | 1 | 0.145 | 6.12 | 1.54 | 6.08 | 5.18 | 7.24 | 2.06 | 0.087 |
Performance
The use of extended_selection_table objects can improve
performance (in our case, measured as time). Here we use
microbenchmark to compare the performance of
sig2noise()
and ggplot2 to plot the
results. First, a selection table with 1000 selections is created simply
by repeating the sample data frame several times and then is converted
to an extended selection table:
# create long selection table
lng.selec.table <- do.call(rbind, replicate(10, lbh_selec_table,
simplify = FALSE
))
# relabels selec
lng.selec.table$selec <- 1:nrow(lng.selec.table)
# create extended selection table
lng_ext_st <- selection_table(
X = lng.selec.table,
pb = FALSE,
extended = TRUE
)
# load packages
library(microbenchmark)
library(ggplot2)
# check performance
mbmrk.snr <- microbenchmark(extended = sig2noise(lng_ext_st,
mar = 0.05
), regular = sig2noise(lng.selec.table,
mar = 0.05
), times = 50)
autoplot(mbmrk.snr) + ggtitle("sig2noise")

The function runs much faster in the extended selection tables. Performance gain is likely to improve when longer recordings and data sets are used (that is, to compensate for computing overhead).
Sharing acoustic data
This new object class allows to share complete data sets, including acoustic data. For example, the NatureSounds package contains an extended selection table with long-billed hermit hummingbirds vocalizations from 10 different song types:
data("Phae.long.est")
Phae.long.est
[30mObject of class
[1m'extended_selection_table'
[22m
[39m
[90m
[1m
Contains:
[22m
* A selection table data frame with 50 row(s) and 8 columns:
[39m
[90m|sound.files | selec| start| end| bottom.freq| top.freq|
[39m
[90m|:-----------|-----:|-----:|-----:|-----------:|--------:|
[39m
[90m|BR2-A1-1 | 1| 0.1| 0.268| 1.60| 11|
[39m
[90m|BR2-A1-2 | 1| 0.1| 0.265| 1.89| 11|
[39m
[90m|BR2-A1-3 | 1| 0.1| 0.272| 1.72| 11|
[39m
[90m|BR2-A1-4 | 1| 0.1| 0.270| 1.83| 11|
[39m
[90m|BR2-A1-5 | 1| 0.1| 0.277| 2.12| 11|
[39m
[90m|CCE-I3-1 | 1| 0.1| 0.249| 1.76| 11|
[39m
[90m... 2 more column(s) (lek, lek.song.type)
[39m
[90m and 44 more row(s)
[39m
[90m
* 50 wave object(s) (as attributes):
[39m
[90mBR2-A1-1, BR2-A1-2, BR2-A1-3, BR2-A1-4, BR2-A1-5, CCE-I3-1
[39m
[90m... and 44 more
[39m
[90m
* A data frame (check.results) with 50 rows generated by check_sels() (as attribute)
[39m
[90m
The selection table was created
[3m
[1m by element
[22m
[23m(see 'class_extended_selection_table')
[39m
[90m* 1 sampling rate(s) (in kHz):
[1m22.05
[22m
[39m
[90m* 1 bit depth(s):
[1m8
[22m
[39m
[90m* Created by warbleR < 1.1.21
[39m
table(Phae.long.est$lek.song.type)
BR2-A1 CCE-I3 LOC-D1 SAT-F1 STR-A2 SUR-E1 SUR-K4 TR1-C2 TR1-C5 TR1-D4
5 5 5 5 5 5 5 5 5 5
The ability to compress large data sets and the ease of performing analyzes that require a single R object can simplify the exchange of data and the reproducibility of bioacoustic analyzes.
References
- Araya-Salas (2017), Rraven: connecting R and Raven bioacoustic software. R package version 1.0.2.
Session information
R version 4.3.2 (2023-10-31)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 20.04.2 LTS
Matrix products: default
BLAS: /usr/lib/x86_64-linux-gnu/atlas/libblas.so.3.10.3
LAPACK: /usr/lib/x86_64-linux-gnu/atlas/liblapack.so.3.10.3; LAPACK version 3.9.0
locale:
[1] LC_CTYPE=pt_BR.UTF-8 LC_NUMERIC=C LC_TIME=es_CR.UTF-8
[4] LC_COLLATE=pt_BR.UTF-8 LC_MONETARY=es_CR.UTF-8 LC_MESSAGES=pt_BR.UTF-8
[7] LC_PAPER=es_CR.UTF-8 LC_NAME=C LC_ADDRESS=C
[10] LC_TELEPHONE=C LC_MEASUREMENT=es_CR.UTF-8 LC_IDENTIFICATION=C
time zone: America/Costa_Rica
tzcode source: system (glibc)
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] kableExtra_1.4.0 warbleR_1.1.30 NatureSounds_1.0.4 knitr_1.45 seewave_2.2.3
[6] tuneR_1.4.6
loaded via a namespace (and not attached):
[1] sass_0.4.8 shinyBS_0.61.1 bitops_1.0-7 xml2_1.3.6 stringi_1.8.3
[6] digest_0.6.34 magrittr_2.0.3 evaluate_0.23 iterators_1.0.14 soundgen_2.6.2
[11] fastmap_1.1.1 foreach_1.5.2 jsonlite_1.8.8 brio_1.1.4 purrr_1.0.2
[16] viridisLite_0.4.2 scales_1.3.0 pbapply_1.7-2 codetools_0.2-19 textshaping_0.3.7
[21] jquerylib_0.1.4 cli_3.6.2 rlang_1.1.3 fftw_1.0-8 munsell_0.5.0
[26] cachem_1.0.8 yaml_2.3.8 tools_4.3.2 parallel_4.3.2 memoise_2.0.1
[31] colorspace_2.1-0 vctrs_0.6.5 R6_2.5.1 proxy_0.4-27 lifecycle_1.0.4
[36] dtw_1.23-1 stringr_1.5.1 fs_1.6.3 MASS_7.3-60.0.1 ragg_1.2.7
[41] desc_1.4.3 pkgdown_2.0.7 bslib_0.6.1 glue_1.7.0 Rcpp_1.0.12
[46] systemfonts_1.0.5 highr_0.10 xfun_0.42 rstudioapi_0.15.0 rjson_0.2.21
[51] htmltools_0.5.7 rmarkdown_2.25 svglite_2.1.3 testthat_3.2.1 signal_1.8-0
[56] compiler_4.3.2 RCurl_1.98-1.14