如何使用rpy2 api从python脚本正确获取R sessionInfo()?

问题描述 投票:2回答:1

我正在尝试通过在python脚本中使用rpy2获得R sessioninfo(),原因是我要从python进行api调用到自定义R库。我想尝试的基本方法是使用简单的python脚本获取当前的R sessioninfo()。

我的尝试

这是我通过遵循此SO post进行的尝试:

SO

我在R studio中使用import rpy2.robjects as robjects import os os.environ['R_HOME'] = "C:/PROGRA~1/R/R-36~1.3" robjects.r(''' source('myfunc.r') ''') myfunc = function(){ return(sessionInfo()) } Sys.getenv('R_HOME')获得了R_HOME。

新的更新尝试

基于@Parfait的建议,我也尝试过这种方式:

R.home()

但是现在我得到另一个错误:

pip install .\rpy2-2.9.5-cp37-cp37m-win_amd64.whl

import os
os.environ['PYTHONHOME'] = r"C:\Users\mia\AppData\Local\Programs\Python\Python37"
os.environ['PYTHONPATH'] = r'C:\Users\mia\AppData\Local\Programs\Python\Python37\Lib\site-packages'
os.environ['R_HOME'] = r'C:\Program Files\R\R-3.6.3'
os.environ['R_USER'] = r'C:\Users\mia\AppData\Local\Programs\Python\Python37\Lib\site-packages\rpy2'

# importing rpy2
import rpy2
import rpy2.robjects as robjects

# test : evaluating R code
robjects.r('''
        # create a function `f`
        f <- function(r, verbose=FALSE) {
            if (verbose) {
                cat("I am calling f().\n")
            }
            2 * pi * r
        }
        ''')

r_f = robjects.r['f']
res = r_f(3)
print(res[0])

现在我可以导入> --------------------------------------------------------------- > OSError Traceback (most recent call last) > <ipython-input-27-b5597ba1add5> in <module> > 1 import rpy2 > ----> 2 import rpy2.robjects as robjects > 3 import itertools > 4 from datetime import datetime > 5 import rpy2.rinterface as rinterface > > c:\users\mia\appdata\local\programs\python\python37\lib\site-packages\rpy2\robjects\__init__.py > in <module> > 14 import itertools > 15 from datetime import datetime > ---> 16 import rpy2.rinterface as rinterface > 17 import rpy2.rlike.container as rlc > 18 > > c:\users\mia\appdata\local\programs\python\python37\lib\site-packages\rpy2\rinterface\__init__.py > in <module> > 44 > 45 if sys.platform == 'win32': > ---> 46 _load_r_dll(R_HOME) > 47 > 48 # cleanup the namespace > > c:\users\mia\appdata\local\programs\python\python37\lib\site-packages\rpy2\rinterface\__init__.py > in _load_r_dll(r_home) > 28 if r_bin not in os.environ.get('PATH'): > 29 os.environ['PATH'] = ';'.join((os.environ.get('PATH'), r_bin, r_mod)) > ---> 30 ctypes.CDLL(r_dll) > 31 > 32 R_HOME = get_r_home() > > c:\users\mia\appdata\local\programs\python\python37\lib\ctypes\__init__.py > in __init__(self, name, mode, handle, use_errno, use_last_error) > 362 > 363 if handle is None: > --> 364 self._handle = _dlopen(self._name, mode) > 365 else: > 366 self._handle = handle > > OSError: [WinError 126] The specified module could not be found ,也可以导入rpy2,但无法正确获取R sessionInfo()。还有什么想法吗?谢谢

期望的输出

我只想使用rpy2.robjects在jupyternotebook或python脚本中打印出R sessionInfo()?有什么解决办法可以做到这一点?有什么想法吗?非常感谢

python r rpy2
1个回答
0
投票

我在Windows机器上遇到了同样的问题,因为没有将R安装路径添加到系统变量中,所以您遇到了这个问题。您应该执行以下操作:

打开rpy2,打开Control Panel\System and Security\System,找到Environment Variables,然后选择System VariablesPath添加到系统变量。然后在您的python脚本中进行此设置:

C:\Program Files\R\R-3.3.2\bin\x64

此问题可以立即解决您的问题。

© www.soinside.com 2019 - 2024. All rights reserved.