【问题标题】:SQLite and R interactionSQLite 和 R 交互
【发布时间】:2025-12-21 20:55:17
【问题描述】:

我正在使用 SQlite 包与 R 中的数据库进行交互。但是,我遇到的问题是,当我在 R 中或从命令行界面运行时,来自完全相同的查询的结果会有所不同. 例如,列中的最小值为 0,但 R 以某种方式给出了结果 -2147332296。因为我只是复制粘贴查询,所以我认为问题不在于查询。我唯一能想到的是数据类型之间的转换可能存在问题。同一列中的最大值为 147031553000,列的类型为“整数”。也许这个值对于 R 使用的数据类型来说太大了,这会导致负值?

但是,还有一个问题。对于相同的查询,R 报告的结果少于我在命令行界面中运行查询时的结果。这里有没有人知道为什么事情可能会出错?

【问题讨论】:

    标签: r sqlite


    【解决方案1】:

    有关其数据类型的详细信息,请参阅 R 文档,例如 an overview of R and RDBMS 的 R 导入/导出手册的第 4.2 节,特别是有关数据类型的第 4.2.2 节。

    如有疑问,请尝试转换为浮点数,因为它们的范围更广,但可能会降低精度。并非所有 SQL 类型都被所有数据库包映射到所有 R 类型。

    【讨论】:

    • 确实问题似乎出在数据类型上。调用 dbDataType 时,结果为“REAL”。虽然 sqlite 中的“INTEGER”最多为 8 个字节,但 REAL 始终为 8 个字节。我猜这个变量大小没有被 R 的 SQLite 库正确处理。但是问题是,我怎样才能确保这些值被解释为真实的?查询完成后,我不知道如何将它们转换为真实,或者至少调用 as.real 不会改变这种情况。
    • 您确实将其作为查询的一部分进行转换——请参阅sqlite.org/lang_expr.html 以获得概述,并且“SELECT CAST(foo as REAL) FROM sometable”应该将列 foo 转换为您的表 sometable 的实数。