class DataFrameBuilder {

    public DataFrame rows(Object[]... rows) {
        int w = columnsIndex.size();
        int h = rows.length;

        // convert array of rows into an array of columns
        Object[][] columnarData = new Object[w][h];
        for (int i = 0; i < h; i++) {

            if (rows[i].length < w) {
                throw new IllegalArgumentException("Row must be at least " + w + " elements long: " + rows[i].length);
            }

            for (int j = 0; j < w; j++) {
                columnarData[j][i] = rows[i][j];
            }
        }

        return fromColumnarData(columnarData);
    }

    protected  DataFrameBuilder(Index columnsIndex);

}