Почему значения NULL приводятся к отрицательному целому числу при использовании DBI в R - PullRequest
0 голосов
/ 17 декабря 2018

Я подключаюсь к базе данных 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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...