def at *positions
      original_positions = positions
      positions = coerce_positions(*positions)
      validate_positions(*positions)

      return category_from_position(positions) if positions.is_a? Integer

      Daru::Vector.new positions.map { |pos| category_from_position(pos) },
        index: @index.at(*original_positions),
        name: @name,
        type: :category,
        ordered: @ordered,
        categories: categories
    end
def at *positions
      original_positions = positions
      positions = coerce_positions(*positions)
      validate_positions(*positions)

      return category_from_position(positions) if positions.is_a? Integer

      Daru::Vector.new positions.map { |pos| category_from_position(pos) },
        index: @index.at(*original_positions),
        name: @name,
        type: :category,
        ordered: @ordered,
        categories: categories
    end
Returns vector for positions specified.
 @param [Array] positions at which values to be retrived.
 @return vector containing values specified at specified positions
 @example
   dv = Daru::Vector.new [:a, 1, :a, 1, :c], type: :category
   dv.at 0..-2
   # => #<Daru::Vector(4)>
   #   0   a
   #   1   1
   #   2   a
   #   3   1