如何使用 Rpy2 更改全局选项

How to change global options with 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"))

但是它们没有效果。

如有任何建议,我们将不胜感激。

当您打算实现时,可能不会执行以下操作:

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

命名参数init_prm_translate可用于选择性重命名 参数名称,主要原因是在 R 中,像 foo.bar 这样的名称在语法上是有效的,但它们不是 Python。有一个默认的简单名称翻译规则,用 _ 替换 . 但 R 可以具有带有 foo.barfoo_bar 参数的函数,在这种情况下,手动命名规则可能是方便。

例如:

import rpy2.robjects as ro

f = 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.

解决了我的问题