У меня есть двоичный файл, который я пытаюсь импортировать в R. Данные, к которым мне нужно получить доступ в этом файле, долго не подписаны (хотя другие типы находятся в файле). Использование readBin () приближается к тому, как должны выглядеть данные, но отличается от того, как должны выглядеть данные:
filepath <- "path/to/file.bin"
integers <- readBin(con=filepath, what= "int", n=3000, endian="little", signed=FALSE)
Синий - это правильные данные, введенные как CSV, тогда как красный - это вход readBin () в R.
Это выглядит как переполнение из-за целых чисел без знака, которые, к счастью, можно исправить с помощью следующей функции, но она работает только с некоторыми значениями:
int_to_unit <- function (x, adjustment=2^32) {
x <- as.numeric(x)
signs <- sign(x)
x[signs < 0] <- x[signs < 0] + adjustment
x
}
Исправление для целых чисел без знака почти работает, но только если данные отрицательны.
По сути, проблема в том, что корректировка 2 ^ 32 работает только с данными, которые заканчиваются как отрицательные. Если данные переполняются> 0, я не могу распознать их, чтобы применить исправление. Что еще хуже, некоторые из них переполняются дважды, а может быть, даже больше.
У меня есть структурная функция typedef для C, которую я теоретически мог бы использовать для импорта функции, но я понятия не имею, как это сделать в R.
typedef struct {data definitions I want to use;} dataIwant;
Я исследовал использование python для решения этой проблемы, но, к сожалению, у него точно такая же проблема
import numpy as np
xbash = np.fromfile('/binaryfile.bin', dtype='<I')
Numpy сталкивается с той же проблемой, что и readBin () в R.
Но мне неясно, как поступить. Мои возможные варианты:
- Напишите сложный алгоритм для пост-обработки данных,
- Вызовите C, чтобы импортировать уникальный тип файла в R, или
- Используйте посредническую функцию, написанную на python через сетчатый пакет
Я знаю, что это не типичная проблема для языка R - спасибо, что уделили время для прочтения.