Преобразование hex в десятичный в R

Я узнал, что в пакете fBasics есть функция, называемая .hex.to.dec.

Когда я выполняю .hex.to.dec(a), он работает.

У меня есть кадр данных со столбцом samp_column, состоящим из таких значений:

a373, 115c6, a373, 115c6, 176b3

Когда я делаю .hex.to.dec(samp_column), я получаю эту ошибку:

"Ошибка в nchar (b): 'nchar()' требует символьного вектора

Когда я делаю .hex.to.dec(as.character(samp_column)), я получаю эту ошибку:

"Ошибка в rep (base.out, 1 + потолок (log (max (число), base = base.out))): недопустимый аргумент" times"

Каким будет лучший способ сделать это?

Ответ 1

Используйте base::strtoi для преобразования шестнадцатеричных векторов символов в целое число:

strtoi(c("0xff", "077", "123"))
#[1] 255  63 123

Ответ 2

Существует простой и общий способ преобразования hex ↔ других форматов с использованием "C/С++ way":

V <- c(0xa373, 0x115c6, 0xa373, 0x115c6, 0x176b3)

sprintf("%d", V)
#[1] "41843" "71110" "41843" "71110" "95923"

sprintf("%.2f", V)
#[1] "41843.00" "71110.00" "41843.00" "71110.00" "95923.00"

sprintf("%x", V)
#[1] "a373"  "115c6" "a373"  "115c6" "176b3"

Ответ 3

strtoi() имеет ограничение в 31 бит. Число шестнадцатиричных чисел с битом набора высоких порядков NA:

> strtoi('0x7f8cff8b')
[1] 2139946891
> strtoi('0x8f8cff8b')
[1] NA