每当我没有完美地编写 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 堆栈。
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=Cattached base packages: [1] stats graphics grDevices utils
datasets methods baseloaded 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 堆栈。