You can protect arguments inside brackets from
N with the family of attributes,
For an indexed variable such as
x, etc., either
SetAttributes[x, NHoldAll] (* what I would normally use *)
SetAttributes[x, NHoldFirst] (* protects only the first argument *)
would keep the index from being numericized by
(* x *)
x can be cleared with
ClearAttributes[x, <attribute>] or
ClearAll[x], but NOT with
Built-in functions that require some or all arguments to be an integer (e.g.
Part), an exact number (e.g.,
AlgebraicNumber), or simply protected from being changed by
Subscript) have one of these attributes.