This package defines a second tabular container type,
FlexTable, that is designed to be a more flexible table.
The two primary difference between
FlexTable are that
- The columns can be mutated - that is, we can add, replace or delete a column.
- The compiler cannot track the types or names of the columns.
FlexTable provides the same interface as a
Table plus some extra operations. However, the fact that the compiler can no longer statically analyse the names and types of the columns at any given moment of the program means that the element type of a
FlexTable is no more specific than
NamedTuple. Iteration over rows will therefore be slower using
for loops than for the equivalent
Table - for maximum speed, higher-level functions (like
innerjoin) or a high-level DSL (like Query.jl) should be utilized.
Amongst other things, using
FlexTable might allow you to more easily port your code from another environment where the columns are mutable, such as DataFrames.jl.
A column can be added by using the
. operator (also known as
julia> ft = FlexTable(name = ["Alice", "Bob", "Charlie"], age = [25, 42, 37]) FlexTable with 2 columns and 3 rows: name age ┌───────────── 1 │ Alice 25 2 │ Bob 42 3 │ Charlie 37 julia> ft.sex = [:F, :M, :M]; julia> ft FlexTable with 3 columns and 3 rows: name age sex ┌────────────────── 1 │ Alice 25 F 2 │ Bob 42 M 3 │ Charlie 37 M
The same syntax is used to replace a column.
julia> ft.sex = ["female", "male", "male"]; julia> ft FlexTable with 3 columns and 3 rows: name age sex ┌───────────────────── 1 │ Alice 25 female 2 │ Bob 42 male 3 │ Charlie 37 male