是否有一种方法可以预加载rpy2与之对话的R实例的库?我花费了25%-30%的响应时间(大约每个图表的.5s )用于点阵或格栅设备的重要调用,如果可能的话,我想要减少。
代码片段:
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(“格”),robjects.r会在“xyplot(.我晚点再打电话。我可以使用R_PROFILE或R_ENVIRON_USER来加速点阵和格栅设备的调用吗?
发布于 2013-10-20 22:48:58
importr是一个相当高水平的功能,交易性能为易用性.除了加载一个R包之外,它还做了很多事情。它还将包中的所有R对象映射到Python (rpy2)对象。在脚本中执行importr('lattice')时,如果不使用结果,就会失去这种努力。
除此之外,在R本身中导入包也不是没有代价的(对于具有S4类定义的更大的R包,当脚本很短时,您可能会注意到这一点)。rpy2对此无能为力。
使用R变量(如R_PROFILE )是可能的,但在最近之前,默认情况下没有启用这一点。如何在SO (这里)上启用它。
现在,importr只占用了响应时间的25%。专注于此的优化工作将无法使其速度超过25% (这是一个非常乐观的限制)。在此之后,将数据插入字符串以作为R代码进行计算并不是最优的(正如rpy2文档中警告的那样)。考虑通过rpy2调用R函数,将数据作为导出缓冲区接口的任何东西传递(例如)。
https://stackoverflow.com/questions/19480524
复制相似问题