猿问

如何使用 Rpy2 更改全局选项

要解决R中的“java.lang.OutOfMemoryError: Java heap space”问题,您需要更改全局选项,如下所示:


 options(java.parameters = c("-XX:+UseConcMarkSweepGC", "-Xmx8192m"))

如果我在python中使用rpy2怎么办。我尝试了以下每个命令


from rpy2.robjects import *

from rpy2.robjects.packages import importr

rbase=importr('base')

from rpy2.robjects.functions import SignatureTranslatedFunction



rbase.options = SignatureTranslatedFunction(rbase.options,

                                             init_prm_translate={'java_parameters': rbase.c("-XX:+UseConcMarkSweepGC", "-Xmx8192m")})


rbase.options(java_parameters = StrVector(rbase.c("-XX:+UseConcMarkSweepGC", "-Xmx8192m")))


rbase.options(java_parameters = rbase.c("-XX:+UseConcMarkSweepGC", "-Xmx8192m"))

但是它们没有效果。


任何建议将不胜感激。


猛跑小猪
浏览 81回答 2
2回答

烙印99

当您打算实现以下目标时,可能不会执行以下操作:rbase.options = SignatureTranslatedFunction(    rbase.options,    init_prm_translate={        'java_parameters': rbase.c("-XX:+UseConcMarkSweepGC", "-Xmx8192m")    })命名参数init_prm_translate可用于可选地重命名参数名称,这样做的主要原因是在 R 中,类似foo.bar的名称在语法上是有效的,但它们不是 Python。有一个默认的简单名称翻译规则可以替换.with_但 R 可以具有同时带有foo.bar和foo_bar参数的函数,在这种情况下,手动命名规则可能会很方便。例如:import rpy2.robjects as rof = ro.r('function(x=1, y=2) {x}')f(x=3)  # returns [3]# translate the named parameter 'x' to 'foo'f_t = ro.functions.SignatureTranslatedFunction(    f, init_prm_translate={'foo': 'x'})f_t(foo=3)  # returns [3] 

慕森王

@lgautier,通过添加setenv _JAVA_OPTIONS "-Xmx2g"到 ~/.cshrc 解决了我的问题。
随时随地看视频慕课网APP

相关分类

Python
我要回答