У меня есть база данных с различными счетчиками токенов и частот. Когда я пытаюсь получить их из R с помощью RSQLite, я получаю низкие отрицательные числа, поэтому, предположительно, возникает проблема с переполнением буфера. Если я открою базу данных, скажем, в sqliteman и вручную запросю ее, данные будут возвращены правильно, поэтому это должно быть связано с DBI или RSQLite.
Есть ли способ получить очень большие целые числа/значения с плавающей запятой через RSQLite без этой проблемы?
Вот минимальный пример:
library("DBI"); library("RSQLite")
db.h <- dbConnect(RSQLite::SQLite(), dbname=":memory:")
dbGetQuery(db.h, "CREATE TABLE test (a TEXT, b INT)")
dbGetQuery(db.h, "INSERT INTO test VALUES ('value1', 282817178)")
dbGetQuery(db.h, "INSERT INTO test VALUES ('value2', 15620693910)")
result = dbGetQuery(db.h, "SELECT * FROM test")
result
dbDisconnect(db.h)
Вывод, который я получаю, выглядит следующим образом:
> a b
> 1 value1 282817178
> 2 value2 -1559175274
Я использую RStudio 0.98.501 (версия R 3.0.2) в 32-разрядной версии Windows 7, если это вообще актуально.
Изменить: обратите внимание, что SQLite 3 использует 64-битные целые числа для всех значений в памяти и при обработке запросов. Использование BIGINT вместо INT, как предлагается в комментариях ниже, приводит к той же проблеме с переполнением.