kdb+可与不同的软件进行交互,本文主要介绍在R中调用kdb+的方式,python、excel、sas、stata、spark、vfp等软件与kdb+的交互方式可参考《kdb+中文教程》第十章问答中的相关内容。 目前,kdb+与R之间通信的主要方式如下表:(详细内容也可查阅kdb+官方帮助Using R with kdb+ https://code.kx.com/q/interfaces/r/ )R中调用kdb+的主要步骤如下:(1)安装R通过https://cran.r-project.org/mirrors.html 选择访问速度较快的镜像站下载R,各镜像站提供内容完全相同,国内推荐清华大学镜像站(https://mirrors.tuna.tsinghua.edu.cn/CRAN/)。在页面上点击Download R for Windows –> base -> Download R x.x.x(版本号) for Windows 链接即可下载,下载后安装到D:\KDB\R\目录(假设,下同)(2)安装RStudioRStudio是主流R语言集成开发环境之一,其界面相较于R的原生界面更为友好易用,在绘图、调试、库管理、工作空间管理等方面提供较好支持。其提供个人免费版(开源)、商业版、云端版等多种版本使用,一般用户选择个人免费版即可。访问RStudio下载页面(https://rstudio.com/products/rstudio/download/),下载RStudio Desktop并安装,安装过程中RStudio会自动检测系统上已安装的R,并提示用户选择合适的版本(32/64位)与之绑定。(3)R调用kdb+ (Rkdb)此部分主要介绍通过Rkdb包实现由R向kdb的访问。通过以下命令安装Rkdb包:# 若此前安装过qserver包,需将其移除if('qserver' %in% rownames(installed.packages())) remove.packages('qserver')# 安装devtools包,用于安装Rkdbif(! 'devtools' %in% rownames(installed.packages())) install.packages('devtools')library(devtools)# 安装Rkdb包install_github('kxsystems/rkdb', quiet=TRUE,INSTALL_opts=c("--no-multiarch"))# 加载Rkdb包,测试安装是否正常library(rkdb)若无法在程序中直接访问github,也可以通过https://github.com/KxSystems/rkdb 下载安装包后通过intall_local命令进行本地安装。Rkdb的本质是实现R与q的进程间通信。为了在R中使用q,需要首先启动q进程,例:q –p 5001在R中执行以下命令以建立R与q的连接:h <- open_connection("127.0.0.1",5001,"user: password")此后通过已建立的连接即可在q中执行任意命令:execute(h, “t: ([] x:1000#`a`b`c;y:1000#1f*til 10;z:1000#1f*til 4); select sum y, dev z by x from t”) x y z1 a 1503 1.1207092 b 1497 1.1166893 c 1500 1.116689绘图示例:# 安装ggplot2包if(! 'ggplot2' %in% rownames(installed.packages())) install.packages('ggplot2')library(ggplot2)# 绘制价格走势图ggplot(data = execute(h, "t: ([] time:til 100; close: 100*exp sums (-0.5+100?1.0)%30); select from t"), aes(time, close))+geom_line()需要将R中的变量传输到q中进行运算并返回结果时,可以在execute函数中添加变量:DF1 <- data.frame(x=c('x','x','y','y'), y=1:4)DF2 <- data.frame(x=c('x','y','z'), z=seq(10,30,10))execute(h, "{[x;y] x lj `x xkey y}", DF1, DF2) x y z1 x 1 102 x 2 103 y 3 204 y 4 20特别地,也可以通过这种方法将R中的数据传回kdb:DF3 <- data.frame(a = 1:5, b =rep(“a”, 5))execute(h, “{`tmp1 set x}”, DF3)“tmp1”此时在q中查看该变量:q)tmp1a b---1 a2 a3 a4 a5 a关闭R与q的连接:close_connection(h)