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

时间:2017-10-16 20:32:48

标签: r anaconda ubuntu-16.04 sqldf

  

sessionInfo()

     

R版本3.4.1(2017-06-30)平台:x86_64-pc-linux-gnu(64位)   运行于:Ubuntu 16.04.3 LTS

     

Matrix产品:默认BLAS:   /home/roughmar/anaconda3/lib/R/lib/libRblas.so LAPACK:   /home/roughmar/anaconda3/lib/R/lib/libRlapack.so

     

区域设置:[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

     

附加基础包:[1] stats graphics grDevices utils
  数据集方法基础

     

通过命名空间加载(而不是附加):[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库时,我都会遇到:

  

加载必需的包:gsubfn

     

加载必需的包:proto

     

无法加载tcltk。将使用较慢的R代码。

     

加载必需的包:RSQLite

我编写的任何sqldf查询运行完美,结果如预期。 当我在表达式上犯了错误,例如额外的逗号,或者误导变量,或者你可能想象的通常会输出错误的任何内容时,问题就会出现。

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

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

提前致谢!

1 个答案:

答案 0 :(得分:6)

我猜测这是在Anaconda,或者更普遍的是混合Conda和普通R.

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

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中运行。

或者,像我(和其他人一样)做:不要让康达靠近你的R堆。