def row_at *positions
      original_positions = positions
      positions = coerce_positions(*positions, nrows)
      validate_positions(*positions, nrows)

      if positions.is_a? Integer
        row = get_rows_for([positions])
        Daru::Vector.new row, index: @vectors
      else
        new_rows = get_rows_for(original_positions)
        Daru::DataFrame.new new_rows, index: @index.at(*original_positions), order: @vectors
      end
    end
Retrive rows by positions
@param [Array<Integer>] positions of rows to retrive
@return [Daru::Vector, Daru::DataFrame] vector for single position and dataframe for multiple positions
@example
df = Daru::DataFrame.new({
a: [1, 2, 3],
b: ['a', 'b', 'c']
})
df.row_at 1, 2
# => #<Daru::DataFrame(2x2)>
#       a   b
#   1   2   b
#   2   3   c