2026年4月20日 研究日志¶
今日主题:处理文档,整理学术资料,更新数据仓库。今天也是0实际进展的一天呢(摊手)今天也来分享一些可能没有啥用的小技巧:如何在Python中调用R(不用我说你也应该知道你需要有Python和R)
首先下载rpy2模块¶
In [1]:
!pip install rpy2
Requirement already satisfied: rpy2 in c:\users\admin\anaconda3\lib\site-packages (3.6.7) Requirement already satisfied: rpy2-rinterface>=3.6.6 in c:\users\admin\anaconda3\lib\site-packages (from rpy2) (3.6.6) Requirement already satisfied: rpy2-robjects>=3.6.5 in c:\users\admin\anaconda3\lib\site-packages (from rpy2) (3.6.5) Requirement already satisfied: packaging in c:\users\admin\anaconda3\lib\site-packages (from rpy2) (25.0) Requirement already satisfied: cffi>=1.15.1 in c:\users\admin\anaconda3\lib\site-packages (from rpy2-rinterface>=3.6.6->rpy2) (2.0.0) Requirement already satisfied: pycparser in c:\users\admin\anaconda3\lib\site-packages (from cffi>=1.15.1->rpy2-rinterface>=3.6.6->rpy2) (2.23) Requirement already satisfied: jinja2 in c:\users\admin\anaconda3\lib\site-packages (from rpy2-robjects>=3.6.5->rpy2) (3.1.6) Requirement already satisfied: tzlocal in c:\users\admin\anaconda3\lib\site-packages (from rpy2-robjects>=3.6.5->rpy2) (5.3.1) Requirement already satisfied: MarkupSafe>=2.0 in c:\users\admin\anaconda3\lib\site-packages (from jinja2->rpy2-robjects>=3.6.5->rpy2) (3.0.2) Requirement already satisfied: tzdata in c:\users\admin\anaconda3\lib\site-packages (from tzlocal->rpy2-robjects>=3.6.5->rpy2) (2025.2)
导入模块 该模块会自动寻找并连接你的R¶
In [3]:
import rpy2.situation
# 可以用这个代码看看导入了你哪个R
for info in rpy2.situation.iter_info():
print(info)
Unable to determine the R version: [WinError 2] The system cannot find the file specified
CFFI extension type
ABI: PRESENT
API: PRESENT
Environment variable: RPY2_CFFI_MODE=ANY
Loaded: CFFI_MODE.API
rpy2 version:
rpy2.rinterface: 3.6.6
Python version:
3.13.5 | packaged by Anaconda, Inc. | (main, Jun 12 2025, 16:37:03) [MSC v.1929 64 bit (AMD64)]
Looking for R's HOME:
Environment variable R_HOME: None
InstallPath in the registry: C:\Program Files\R\R-4.5.2
Environment variable R_USER: None
Environment variable R_LIBS_USER: None
R version:
In the PATH: None
Loading R library from rpy2: OK
Additional directories to load R packages from:
None
C extension compilation:
include:
['C:/PROGRA~1/R/R-45~1.2/include', 'C:/PROGRA~1/R/R-45~1.2/include/x64']
libraries:
['R', 'm']
library_dirs:
['C:/PROGRA~1/R/R-45~1.2/bin/x64']
extra_compile_args:
['-std=c99']
extra_link_args:
[]
Directory for the R shared library:
lib
现在就可以试试在Python中运行一个R代码了¶
In [4]:
from rpy2 import robjects
# 运行一段 R 代码
robjects.r('x <- c(1, 2, 3, 4)')
robjects.r('y <- mean(x)')
# 从 R 取回变量 y
y = robjects.r('y')
y
Out[4]:
FloatVector with 1 elements.
| 2.500000 |
把Python数据传到R 运算后结果传回Python¶
这个模块的实际作用可能就是有合适的R库解决你的问题,但你主要用Python。你可以把数据传给R,计算后的结果传回Python进入下个步骤。以下就是一个这个流程的最短代码。
In [5]:
from rpy2 import robjects
# 把 Python 的列表传给 R
py_list = [10, 20, 30]
r_list = robjects.FloatVector(py_list)
robjects.globalenv['a'] = r_list
# 在 R 中处理
robjects.r('b <- a * 2')
# 回到 Python
b = robjects.r('b')
list(b)
Out[5]:
[20.0, 40.0, 60.0]
今天忙了一天的档案工作,填表填到麻木。今天就先到这里了,明天继续读文献咯,大家明天见