【问题标题】:Preloading for Importr in Django在 Django 中为 Importr 预加载
【发布时间】:2023-09-12 19:01:01
【问题描述】:

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

代码sn-p:

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 调用吗?

【问题讨论】:

    标签: django rpy2


    【解决方案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 函数,将数据作为导出缓冲区接口的任何内容传递(例如)。

    【讨论】:

    • 非常感谢。我将深入探讨可用的性能优化。顺便说一句,rpy2 很棒。感谢您的努力。
    最近更新 更多