2011-03-07 1 views
1

Je me connecte à une base de données H2 en utilisant RJDBC (DBI). Les champs null dans la base de données sont implicitement convertis en 0 dans les données R résultant des appels des fonctions dbReadTable ou dbGetQuery. J'ai eu du mal à trouver de la documentation à ce sujet, mais j'ai trouvé au moins une autre référence au problème de quelqu'un utilisant RJDBC se connectant à une base de données mysql, donc je ne m'attends pas à ce que le problème soit avec H2.L'autoconversion de db NULL à 0 peut-elle être évitée lors de l'utilisation de RJDBC?

Je préférerais de beaucoup une NA ou une NULL où la valeur de la base de données est nulle. Existe-t-il un paramètre facultatif ou un autre moyen permettant d'empêcher le pilote RJDBC avec DBI dans R de remplacer implicitement les valeurs NULL de la base de données?

EDIT: Cela semble se produire uniquement pour les colonnes avec un type numérique. Les colonnes basées sur VARCHAR converties en facteurs semblent avoir des NA pour les valeurs NULL de base de données. La conversion 0 implicite est-elle un bogue connu (ou une fonction dangereuse) de RJDBC traitant les valeurs NULL dans des colonnes numériques?

Répondre

1

Il s'avère que la conversion implicite nulle en 0 est une "caractéristique" de l'API JDBC que RJDBC est un wrapper fin.

http://download.oracle.com/javase/6/docs/api/java/sql/ResultSet.html#getDouble(int)

Considérez-moi comme sidérés.

La dernière version de développement de RJDBC 0.1-6 disponible sur CRAN fonctionne désormais autour de ce comportement mensonger et renvoie correctement NA pour les valeurs SQL numériques nulles.

1

Cela semble être un problème avec RJDBC comme vous l'indiquez. Une solution de contournement est implémentée dans la version 0.1-2.3 du RH2 package (récemment téléchargé sur CRAN et devenant disponible dès maintenant sur CRAN et les miroirs).

Questions connexes