0

有没有办法为 rpy2 对话的 R 实例预加载库?我将 25-30% 的响应时间(每张图表大约 0.5 秒)用于对 lattice 或 grdevices 的导入调用,并且希望尽可能减少。

代码片段:

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 来加速 lattice 和 grdevices 调用吗?

4

1 回答 1

1

importr是一个相当高级的功能,为了易于使用而交易性能。除了加载 R 包之外,它还做了很多工作。它还将该包中的所有 R 对象映射到 Python (rpy2) 对象。importr('lattice')如果不使用结果,那么在您的脚本中执行时会失去这种努力。

除此之外,在 R 本身中导入包并非没有成本(对于具有 S4 类定义的较大的 R 包,当脚本很短时,这可能会很明显)。rpy2对此无能为力。

可以使用 R_PROFILE 等 R 变量,但在最近之前默认情况下未启用此功能。如何启用它在 SO(这里)。

现在,这里importr“仅”占用了 25% 的响应时间。专注于此的优化工作将无法使其速度提高 25% 以上(这是一个非常乐观的限制)。将数据插入字符串以在此之后将其评估为 R 代码并不是非常理想的(如rpy2 的文档中所警告的那样)。考虑通过 rpy2 调用 R 函数,将数据作为导出缓冲区接口的任何内容传递(例如)。

于 2013-10-20T22:48:58.003 回答