如何使用 rpy2 api 从 python 脚本正确获取 R sessionInfo()?
how to correctly get R sessionInfo() from python script with rpy2 api?
我正在尝试通过在 python 脚本中使用 rpy2
来获取 R sessioninfo(),原因是我要从 python 调用 api 到自定义 R 库。我想尝试的基本事情是使用简单的 python 脚本获取当前 R sessioninfo() 。
我的尝试:
这是我尝试遵循此 SO
post:
的尝试
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())
}
我在 R studio 中使用 Sys.getenv('R_HOME')
或 R.home()
得到了 R_HOME。
新的更新尝试:
根据@Parfait的建议,我也试过这样:
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
也可以导入 rpy2.robjects
,但无法正确获取 R sessionInfo()。还有什么想法吗?谢谢
期望输出:
我只想在 jupyternotebook 或 python 脚本中使用 rpy2
打印出 R sessionInfo()?任何解决方案可以实现这一目标?有什么想法吗?非常感谢
我 运行 在我的 windows 机器上遇到同样的问题,你遇到这个问题是因为你没有将 R 安装路径添加到系统变量。您应该执行以下操作:
打开 Control Panel\System and Security\System
,打开 Environment Variables
,找到 System Variables
,然后 select Path
添加 C:\Program Files\R\R-3.3.2\bin\x64
到您的系统变量。确保从 uci website 安装 rpy2
,下载 rpy2.whl
然后 pip install rpy2.xx.xx.whl
然后在您的 python 脚本中进行此设置:
import os
os.environ['PYTHONHOME'] = r"C:\Users\me\AppData\Local\Programs\Python\Python37"
os.environ['PYTHONPATH'] = r"C:\Users\me\AppData\Local\Programs\Python\Python37\Lib\site-packages"
os.environ['R_HOME'] = r"C:\Program Files\R\R-3.3.2"
os.environ['R_USER'] = r"C:\Users\me\AppData\Local\Programs\Python\Python37\Lib\site-packages\rpy2"
import rpy2
import rpy2.robjects as robjects
pi = robjects.r['pi']
print(pi)
这个问题可以马上解决你的问题。
我正在尝试通过在 python 脚本中使用 rpy2
来获取 R sessioninfo(),原因是我要从 python 调用 api 到自定义 R 库。我想尝试的基本事情是使用简单的 python 脚本获取当前 R sessioninfo() 。
我的尝试:
这是我尝试遵循此 SO
post:
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())
}
我在 R studio 中使用 Sys.getenv('R_HOME')
或 R.home()
得到了 R_HOME。
新的更新尝试:
根据@Parfait的建议,我也试过这样:
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
也可以导入 rpy2.robjects
,但无法正确获取 R sessionInfo()。还有什么想法吗?谢谢
期望输出:
我只想在 jupyternotebook 或 python 脚本中使用 rpy2
打印出 R sessionInfo()?任何解决方案可以实现这一目标?有什么想法吗?非常感谢
我 运行 在我的 windows 机器上遇到同样的问题,你遇到这个问题是因为你没有将 R 安装路径添加到系统变量。您应该执行以下操作:
打开 Control Panel\System and Security\System
,打开 Environment Variables
,找到 System Variables
,然后 select Path
添加 C:\Program Files\R\R-3.3.2\bin\x64
到您的系统变量。确保从 uci website 安装 rpy2
,下载 rpy2.whl
然后 pip install rpy2.xx.xx.whl
然后在您的 python 脚本中进行此设置:
import os
os.environ['PYTHONHOME'] = r"C:\Users\me\AppData\Local\Programs\Python\Python37"
os.environ['PYTHONPATH'] = r"C:\Users\me\AppData\Local\Programs\Python\Python37\Lib\site-packages"
os.environ['R_HOME'] = r"C:\Program Files\R\R-3.3.2"
os.environ['R_USER'] = r"C:\Users\me\AppData\Local\Programs\Python\Python37\Lib\site-packages\rpy2"
import rpy2
import rpy2.robjects as robjects
pi = robjects.r['pi']
print(pi)
这个问题可以马上解决你的问题。