Шаблон регулярного выражения «^» (вне любых скобок символьного класса) представляет точку непосредственно перед первым символом элемента «символьного» класса (также называемого «строка» в других компьютерных языках).Это просто заменяет начало каждого элемента «персонажа» в векторе на «chr».Он неявно приводит «числовое» входное значение к «символу», поэтому меняет режим результата.
> dat$V1 <- sub("^", "chr", dat$V1 )
> dat
V1 V2 V3
1 chr1 3423086 3423685
2 chr1 3467184 3467723
3 chr1 4115236 4115672
4 chr1 5202437 5203057
5 chr2 7132558 7133089
6 chr2 7448688 7449283
Конечно, можно было бы использовать paste("chr", dat$V1, sep="")
, но я подумал, что решение для регулярных выражений может быть более подходящим.