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]

今天忙了一天的档案工作,填表填到麻木。今天就先到这里了,明天继续读文献咯,大家明天见