有没有办法为rpy2会话的R实例预加载库?在进口商调用格子或grdevices时,我花费了25-30%的响应时间(每个图表大约0.5秒),并且如果可能的话,我希望减少。
代码段:
grdevices = importr('grDevices')
importr('lattice')
imagefile = File(open('1d_%s.png' % str(uuid4()), 'w'))
grdevices.png(file=imagefile.name, type='cairo',width=400,height=350)
rcmd="""
print(
xyplot(yvec~xvec,labels=labels,type=c('p','r'),
ylab='%s',xlab='%s'
)
)"""% (y_lab, x_lab)
robjects.r(rcmd)
grdevices.dev_off()
imagefile.close()
如果我不调用importr(“lattice”),robjects.r会对我后来制作的“xyplot(...”调用事件感到不满。我可以使用R_PROFILE或R_ENVIRON_USER加速格子和grdevices调用吗?
答案 0 :(得分:1)
importr
是一个非常高级别的功能,易于使用的交易性能。除了加载R包之外,它还有很多功能。它还将该包中的所有R对象映射到Python(rpy2)对象。如果未使用结果,则在脚本中执行importr('lattice')
时会失去这种努力。
除此之外,在R中导入包本身并非没有成本(对于具有S4类定义的较大R包,当脚本很短时,这可能是显而易见的)。 rpy2
对此无能为力。
可以使用R_PROFILE之类的R变量,但默认情况下不会在very recently之前启用。如何启用它是在SO(here)。
现在,importr
只占“响应时间的25%”。专注于此的优化工作将无法使其超过25%(这是一个非常乐观的限制)。将数据插入字符串以将其评估为R代码之后不是非常优化(如documentation for rpy2中所述)。考虑通过rpy2调用R函数,将数据作为导出缓冲区接口的任何内容传递(例如)。