r - 使 SQLite 的 generate_sequence 在 MS Windows 下的 R 的 sqldf 库中使用

标签 r windows sqlite sqldf rsqlite

我希望使用 SQLite3 的 generate_series Table-Valued Function来自 R 的 sqldf 库,后者又使用 RSQLite 库。我希望安装/配置后,我可以将其称为:

sqldf('SELECT value FROM generate_series(5,100,5)')

来自阅读Run-Time Loadable Extensions , 我知道我需要先打电话 load_extension(X) ,具体为

sqldf('select load_extension("C:\\my\\path\\to\\sqlite\\pathext\\misc\\series.c")')

但是,我也读到了 Extension loading is off by default ,而且我不知道如何从 sqldf 调用中打开它。这可能吗?我是否必须使用此默认切换来编译我自己的 sqlite3?

此外,我想确认 Compiling A Loadable Extension 没有捷径我自己 MinGW ,因为显然没有编译 ext/misc/series.c , 我会发现 SQLite generate_series is missing ,并且没有一个 Downloads提供它编译。

如果我理解正确,我将不必 compile all of SQLite ,我可以将下载的版本与我编译的扩展一起使用。

最后,我如何确保 sqldf/RSQLite 选择的 sqlite3 版本是我配置的版本?这会迫使我编译自己的 RSQLite 而不是简单地 install.packages(c('RSQLite')) 吗?

所有这些似乎只是为了这个扩展而做的很多工作。有更好的方法吗?

感谢您的帮助!

最佳答案

建议您提交issue on the RSQLite github site添加它,但与此同时这里有一些不涉及重建 SQLite 和 RSQLite 的解决方法。

1) 递归 CTE 这可以在不使用 CTE 的扩展的情况下完成,如 https://www.sqlite.org/series.html 中所示。 .

具体试试这个 sqldf 代码:

library(sqlite)

start <- 1
end <- 3
step <- 1
fn$sqldf("
  WITH RECURSIVE generate_series(value) AS (
    SELECT $start
    UNION ALL
    SELECT value+$step FROM generate_series
     WHERE value+$step<=$end
) SELECT value FROM generate_series
")
##   value
## 1     1
## 2     2
## 3     3

2) 非递归 CTE 假设我们有一个已知至少具有所需行数的数据框。它的内容并不重要。例如,内置的 BOD 数据框有 6 行,假设我们需要不超过 6 行的 3 行,这样它就可以工作。

fn$sqldf("
  WITH generate_series(value) AS (
    SELECT $start + $step * (rowid - 1) FROM BOD LIMIT ($end - $start) / $step + 1
  ) SELECT value FROM generate_series
")
##   value
## 1     1
## 2     2
## 3     3

如果 startstep 为 1 这可以简化为:

fn$sqldf("
  WITH generate_series(value) AS (
    SELECT rowid FROM BOD LIMIT $end
  ) SELECT value FROM generate_series
")

3) 在 R 中创建 另一种可能性是在 R 中创建系列,然后只在 sqldf 中使用它:

generate_series <- data.frame(value = seq(start, end, step))
sqldf("SELECT value FROM generate_series")
##   value
## 1     1
## 2     2
## 3     3

关于r - 使 SQLite 的 generate_sequence 在 MS Windows 下的 R 的 sqldf 库中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53568665/

相关文章:

Python:突破 SteamCMD 提示符

string - 如何在 Windows 批处理文件中使用 FOR 获取文本文件中的路径变量?

python - 需要帮助识别涉及 matplotlib 和 Flask 的内存泄漏

r - 如何为具有稳定映射的 ggplot2 中的分类变量分配颜色?

r - 如何以编程方式查找 R 包的数量?

r - 在ubuntu上编译R包,ELF头无效

r - 使用 dplyr 获取零方差的列名

database - Windows 8.1 上的 PostgreSQL 安装 - 数据库集群初始化失败

iphone - 如何创建或稳定 FMDB 中两个表之间的关系?

sql - SQLite 中针对相似度矩阵的关键字/短语搜索