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.

Reply via email to