Почему значения NULL приводятся к отрицательному целому числу при использовании DBI в R

Я подключаюсь к базе данных SQLite, используя DBI в R, используя следующий скрипт

db = "/Path/To/Database/Foo.db"
obsTable = "obs"
obsQryStr <- paste('select * from ', obsTable)

con <-  dbConnect(RSQLite::SQLite(), dbname = db)
importedData <- dbGetQuery( con, obsQryStr)
dbDisconnect(con)

В рассматриваемой таблице есть ряд столбцов целочисленных значений. Вот вывод head(importedData,12):

               time subject encounter location temp          hr sbp         dbp rr        spo2 o2Log avpu gcs concern
1  2010-01-01 08:00       2         1        1   NA          97 113          66 12         100     1    A  15       0
2  2010-01-01 08:15       2         1        1 36.2          95 110          62 12         100     1    A  15       0
3  2010-01-01 08:30       2         1        1 36.2          84  90          61 12         100     1    A  15       0
4  2010-01-01 08:45       2         1        1 36.2          80  96          55 12         100     1    A  15       0
5  2010-01-01 09:00       2         1        1 36.2          77  88          51 12         100     0    A  15       0
6  2010-01-01 09:15       2         1        1 36.3          75  91          50 12         100     0    A  15       0
7  2010-01-01 09:30       2         1        1 36.3          76  92          52 12         100     1    A  15       0
8  2010-01-01 10:00       2         1        1 36.4          73  91          52 12         100     0    A  15       0
9  2010-01-01 10:30       2         1        1 36.5          71  91          51 12         100     1    A  15       0
10 2010-01-01 11:30       2         1        1 36.6          69  92          53 12         100     1    A  15       0
11 2010-01-01 12:30       2         1        1 36.6          76 118          63 14         100     1    A  15       0
12 2010-01-01 13:00       2         1        1   NA -2147483648  NA -2147483648 NA -2147483648     1    A  15       0

Как видно из строки 12, для некоторых столбцов значения NULL были заменены на -2147483648 вместо NA. Почему это происходит и как я могу это остановить?

SQL для соответствующих строк:

CREATE TABLE IF NOT EXISTS `sim` (
    `time`  TEXT,
    `subject`   INTEGER,
    `encounter` INTEGER,
    `location`  INTEGER,
    `temp`  REAL,
    `hr`    INTEGER,
    `sbp`   INTEGER,
    `dbp`   INTEGER,
    `rr`    INTEGER,
    `spo2`  INTEGER,
    `o2Log` INTEGER,
    `avpu`  TEXT,
    `gcs`   INTEGER,
    `concern`   INTEGER
);
INSERT INTO `sim` (time,subject,encounter,location,temp,hr,sbp,dbp,rr,spo2,o2Log,avpu,gcs,concern) VALUES ('2010-01-01 08:00',2,1,1,NULL,97,113,66,12,100,1,'A',15,0);
INSERT INTO `sim` (time,subject,encounter,location,temp,hr,sbp,dbp,rr,spo2,o2Log,avpu,gcs,concern) VALUES ('2010-01-01 08:15',2,1,1,36.2,95,110,62,12,100,1,'A',15,0);
INSERT INTO `sim` (time,subject,encounter,location,temp,hr,sbp,dbp,rr,spo2,o2Log,avpu,gcs,concern) VALUES ('2010-01-01 08:30',2,1,1,36.2,84,90,61,12,100,1,'A',15,0);
INSERT INTO `sim` (time,subject,encounter,location,temp,hr,sbp,dbp,rr,spo2,o2Log,avpu,gcs,concern) VALUES ('2010-01-01 08:45',2,1,1,36.2,80,96,55,12,100,1,'A',15,0);
INSERT INTO `sim` (time,subject,encounter,location,temp,hr,sbp,dbp,rr,spo2,o2Log,avpu,gcs,concern) VALUES ('2010-01-01 09:00',2,1,1,36.2,77,88,51,12,100,0,'A',15,0);
INSERT INTO `sim` (time,subject,encounter,location,temp,hr,sbp,dbp,rr,spo2,o2Log,avpu,gcs,concern) VALUES ('2010-01-01 09:15',2,1,1,36.3,75,91,50,12,100,0,'A',15,0);
INSERT INTO `sim` (time,subject,encounter,location,temp,hr,sbp,dbp,rr,spo2,o2Log,avpu,gcs,concern) VALUES ('2010-01-01 09:30',2,1,1,36.3,76,92,52,12,100,1,'A',15,0);
INSERT INTO `sim` (time,subject,encounter,location,temp,hr,sbp,dbp,rr,spo2,o2Log,avpu,gcs,concern) VALUES ('2010-01-01 10:00',2,1,1,36.4,73,91,52,12,100,0,'A',15,0);
INSERT INTO `sim` (time,subject,encounter,location,temp,hr,sbp,dbp,rr,spo2,o2Log,avpu,gcs,concern) VALUES ('2010-01-01 10:30',2,1,1,36.5,71,91,51,12,100,1,'A',15,0);
INSERT INTO `sim` (time,subject,encounter,location,temp,hr,sbp,dbp,rr,spo2,o2Log,avpu,gcs,concern) VALUES ('2010-01-01 11:30',2,1,1,36.6,69,92,53,12,100,1,'A',15,0);
INSERT INTO `sim` (time,subject,encounter,location,temp,hr,sbp,dbp,rr,spo2,o2Log,avpu,gcs,concern) VALUES ('2010-01-01 12:30',2,1,1,36.6,76,118,63,14,100,1,'A',15,0);
INSERT INTO `sim` (time,subject,encounter,location,temp,hr,sbp,dbp,rr,spo2,o2Log,avpu,gcs,concern) VALUES ('2010-01-01 13:00',2,1,1,NULL,NULL,NULL,NULL,NULL,NULL,1,'A',15,0);

Единственная подсказка, которую я имею, заключается в том, что уязвимые столбцы по какой-то причине преобразуются из INT как предпочтительного типа в базе данных SQLite в числовой. sapply(importedData, class) производит следующий вывод:

    time     subject   encounter    location        temp          hr         sbp         dbp          rr        spo2 
"character"   "integer"   "integer"   "integer"   "numeric"   "numeric"   "integer"   "numeric"   "integer"   "numeric" 
      o2Log        avpu         gcs     concern 
  "integer" "character"   "integer"   "integer"

0 ответов

Похоже, это ошибка в RSQLite. Об этом сообщалось здесь: https://github.com/r-dbi/RSQLite/issues/291

И исправлено в 2.1.2: https://github.com/r-dbi/RSQLite/releases/tag/v2.1.2

Другие вопросы по тегам