R如何调用kdb+?

2022-05-25 00:00:00 变量 命令 镜像 安装 下载
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)安装RStudio
RStudio是主流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包,用于安装Rkdb
if(! '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        z
1 a 1503 1.120709
2 b 1497 1.116689
3 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  z
1 x 1 10
2 x 2 10
3 y 3 20
4 y 4 20
 
特别地,也可以通过这种方法将R中的数据传回kdb:
DF3 <- data.frame(a = 1:5, b =rep(“a”, 5))
execute(h, “{`tmp1 set x}”, DF3)
“tmp1”
 
此时在q中查看该变量:
q)tmp1
a b
---
1 a
2 a
3 a
4 a
5 a
 
关闭R与q的连接:
close_connection(h)
 
 
来源 https://www.modb.pro/db/212287

相关文章