OK, I found a second way. Like kglr's solution, this one also uses AssociationThread
, but applies it only once:
makeDataset[columns_, columnLabels_] := Module[{labeledColumns, records},
labeledColumns = AssociationThread[columnLabels, columns];
records = Transpose[labeledColumns, AllowedHeads -> All];
Dataset[records]
];
The importer can be easily written in terms of makeDataset
:
readDataset[datafile_, headerfile_] := Module[{columns, columnLabels},
columns = Transpose[Import[datafile]];
columnLabels = First[Import[headerfile]];
makeDataset[columns, columnLabels]
];