Почему значения 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"

person Tim Bonnici    schedule 17.12.2018    source источник
comment
-2147483648 не равно 2^-31. Учитывая, что NULL, похоже, отображается как NA в других строках/столбцах, я подозреваю, что у ваших данных есть какая-то проблема.   -  person Tim Biegeleisen    schedule 17.12.2018
comment
Пожалуйста, опубликуйте те же данные, которые хранятся в SQLite (не импортированный результат в R).   -  person Parfait    schedule 17.12.2018
comment
Спасибо обоим. Отредактировали. Твое предложение кажется наиболее вероятным, Тим, но я не понимаю, как это происходит.   -  person Tim Bonnici    schedule 17.12.2018
comment
Я завернул ваш код в репрекс, но здесь ошибка не возникает: 1c23936abc6d55734e3d186ae5849254. Какую ОС вы используете (пожалуйста, также укажите разрядность)?   -  person krlmlr    schedule 13.03.2019
comment
Спасибо за ваше расследование, @krlmlr. Это было на Mac OS X 10.14. После публикации этого я обнаружил, что не могу воспроизвести проблему на другом компьютере под управлением MacOS. Файлы и база данных R синхронизируются между двумя компьютерами с помощью Dropbox, поэтому, как вы подразумеваете, это должно быть что-то, связанное со средой на компьютере, или, возможно, одна установка R каким-то образом отличается от другой.   -  person Tim Bonnici    schedule 18.03.2019


Ответы (1)


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

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

person Josh D.    schedule 30.10.2019