每当我没有完美地编写 sqldf 查询时,R 就会崩溃

R crashes whenever I don't write a sqldf query perfectly

sessionInfo()

R version 3.4.1 (2017-06-30) Platform: x86_64-pc-linux-gnu (64-bit) Running under: Ubuntu 16.04.3 LTS

Matrix products: default BLAS: /home/roughmar/anaconda3/lib/R/lib/libRblas.so LAPACK: /home/roughmar/anaconda3/lib/R/lib/libRlapack.so

locale: [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_IE.UTF-8 LC_COLLATE=en_US.UTF-8 [5] LC_MONETARY=en_IE.UTF-8 LC_MESSAGES=en_US.UTF-8 [7] LC_PAPER=en_IE.UTF-8 LC_NAME=C [9] LC_ADDRESS=C LC_TELEPHONE=C [11] LC_MEASUREMENT=en_IE.UTF-8 LC_IDENTIFICATION=C

attached base packages: [1] stats graphics grDevices utils
datasets methods base

loaded via a namespace (and not attached): [1] compiler_3.4.1 R6_2.2.1 magrittr_1.5 IRdisplay_0.4.4 [5] pbdZMQ_0.2-6
tools_3.4.1 crayon_1.3.2 uuid_0.1-2 [9] stringi_1.1.5
IRkernel_0.7.1 jsonlite_1.5 stringr_1.2.0 [13] digest_0.6.12
repr_0.10 evaluate_0.10

每当我加载 sqldf 库时,我都会收到:

Loading required package: gsubfn

Loading required package: proto

Could not load tcltk. Will use slower R code instead.

Loading required package: RSQLite

我编写的任何 sqldf 查询都运行完美,结果符合预期。 当我在表达式上出错时,问题就会出现,比如多了一个逗号,或者拼错了一个变量,或者任何你想象的通常会输出错误的东西。

我没有收到错误 - 它只是崩溃了。 在 Rstudio 和 jupyter 上都进行了测试——内核刚刚死掉,需要重新启动。一段时间后它变得很累,因为我每次都需要重新加载所有变量。

我知道这很模糊,但我非常愿意提供可能需要的任何信息。

提前致谢!

我猜想这是在 Anaconda 上,或者更普遍地说是在混合 Conda 和普通 R 上。

在我的系统上——标准 Ubuntu (17.04) R (3.4.2) 二进制文件,通过带有标准 sqldf 的 CRAN 镜像——一切正常:

R> a1r <- head(warpbreaks)     ## initial `help(sqdf)` example
R> a1s <- sqldf("select * from warpbreaks limit 6")
R> identical(a1r, a1s)
[1] TRUE
R> sqldf("selectFOO * from warpbreaks limit 6 BAR")   # no termination on error
Error in rsqlite_send_query(conn@ptr, statement) : 
  near "selectFOO": syntax error
R> 
R> sqldf("select * from warpbreaks limit 2")
  breaks wool tension
1     26    A       L
2     30    A       L
R> 

当工具链损坏时,二进制文件可能不兼容。

我建议在本地重建 涉及的包及其依赖项。所以至少是 RSQLite 和 DBI,问题当然是它们引入了无数其他包。

您也可以考虑在 Docker 中 运行。

或者,像我(和无数其他人)那样做:不要让 Conda 靠近你的 R 堆栈。