On Saturday, 26 March 2016 at 06:28:42 UTC, Ali Çehreli wrote:
WARNING: Do not try to compile this code. Your computer may be
unresponsive for a while. :)
On 03/25/2016 02:54 PM, data pulverizer wrote:
> I am attempting to create a table struct with generic column
types using
> templates.
However, the template arguments are not types; rather, aliases.
> template ColumnTable(T...){
> struct ColumnTable{
> private:
> typeof(T) data;
> string[] names;
> struct Range{
> size_t begin;
> size_t end;
> }
> // This function is the source of the issue
> auto subTable(Range rowRange, Range columnRange)(){
> auto new_data = data[columnRange.begin ..
columnRange.end];
> auto output = ColumnTable!(new_data)(new_data); //
This is the
> problem
new_data is a local variable. So, this instantiation of
ColumnTable is with that symbol.
> void main(){
> string[] names = ["tariq", "sharma", "peter", "rakel"];
> double[] salary = [44.5, 32.2, 40.1, 28.1];
> int[] age = [24, 20, 22, 25, 19];
> writeln(ColumnTable!(names, salary, age)(names, salary,
age));
> }
Likewise, that instantiation of ColumnTable is with the symbols
'names', 'salary', and 'age'. Is that what you want? Or do you
want to instantiate with their types? Can you explain some more
what you are trying to do.
Ali
I am trying to build a table similar to R's dataframe but with
unbounded data types. I am hoping that D's flexible template
programming methods will allow table-like class or struct to be
constructed with "naked" types i.e. unwrapped with variant. The
ColumnTable object consists of vector columns that are bound
together in a tuple - the data member and accessed in a similar
way to your matrix example. The table will have column names and
should be accessible by:
table[0..4, "colname"]
table[0..4, ["colname_1", "colname_2", "colname_3"]]
table[0..$, 0..4]
and should be able to be subsetted and inserted into by another
table
table_1[0..4, 3..4] = table_2
table_1[0..4, ["colname_1", "colname_2"]] = table_2
and columns could be added or overwritten
table[0..$, 0] = someVector
table.columnBind(someVector)
column bind two table together ...
auto new_table = ColumnTable(table_1, table_2)
auto new_table = ColumnTable(table_1, someVector)
row bind two table having the same column characteristics
auto new_table = rbind(table_1, table_2)
Then perhaps do something similar for row-based tables.