Числовые данные пониженной точности - PullRequest
1 голос
/ 26 марта 2012

Мне нужно иметь возможность эффективно извлекать данные R по сети.Типичный набор данных, который я пытаюсь получить, состоит из нескольких сотен тысяч чисел.

В настоящее время я использую saveRDS для хранения данных и readRDS для их извлечения, что дает мне приличную производительность.Но некоторые из предварительно вычисленных результатов могут по-прежнему находиться в диапазоне десятков МБ из-за того, что R хранит каждое число в 4 байтах.Для моего приложения мне не нужно больше точности, чем 1 или, самое большее, 2-байтовое целое число, поэтому я думаю, что смогу сэкономить некоторое время, сохраняя двоичные данные в другом формате.

Iне удалось найти в Интернете ничего об эффективном хранении данных R в форматах с пониженной точностью.Очевидно, я мог читать и записывать в / из моего собственного двоичного формата, но я предполагаю, что издержки цикла, выполняемые в R, намного перевесят любые преимущества в производительности, которые я получу, сократив время чтения / передачи по сети.

Кто-нибудь имеет опыт работы с этим?

1 Ответ

2 голосов
/ 26 марта 2012

Я начал писать пакет, pack , чтобы помочь с такой проблемой.Я использовал его для поддержки другого пакета, который представлял собой API для ныне несуществующей службы .

Если вам просто нужно 1-байтовое целое число (<256), вы можете использовать <code>as.rawи отправить результат;затем используйте as.integer на машине, получающей данные.

> as.raw(255)
[1] ff
> as.integer(as.raw(255))
[1] 255

Для 2-байтового целого числа вы можете использовать pack и отправить результат;затем используйте unpack на компьютере, получающем данные.

> library(pack)
> pack("v", 255)
[1] ff 00
> pack("v", 256)
[1] 00 01
> unpack("v", as.raw(255))
[[1]]
[1] 255

Я никогда не использовал его, но слышал хорошие слова о RProtoBuf .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...