You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Python逻辑回归结果导入R(无需CSV中转)

解决R中reticulate导入Python逻辑回归结果的问题

问题背景

因Python具备更强的多核运行能力与内存效率,希望在Python中执行逻辑回归分析,再将结果摘要导入R(最终用于Quarto文档)。但使用reticulate包导入结果时失败,且希望避免通过CSV文件中转数据。

问题分析

原代码存在两个核心问题:

  1. 不必要地通过CSV中转数据,增加IO开销
  2. 未正确从Python代码中返回结构化的模型结果,导致R无法直接读取statsmodels的模型/摘要对象

解决方案

利用reticulate的跨语言变量访问能力,直接在Python中读取R的数据集;同时在Python里将模型系数整理为结构化DataFrame,返回后在R中直接处理。

完整修正代码

## 加载所需包
library(tidyverse)
library(broom)
library(gt)
library(reticulate)
library(ISLR)

## 预处理数据集:无需写入CSV
test_data <- ISLR::OJ %>%
  select(Purchase, PriceCH, SpecialCH, Store7) %>% 
  mutate(Purchase = if_else(Purchase == 'CH', 1, 0)) %>%
  as_tibble()

## 执行Python逻辑回归并返回结构化结果
py_coef_df <- py_run_string("
import pandas as pd
import statsmodels.api as sm

# 直接读取R环境中的test_data,无需CSV中转
data = r.test_data.copy()

# 定义因变量与自变量
y = data['Purchase']
X = data[['PriceCH', 'SpecialCH', 'Store7']]

# 处理分类变量,生成哑变量
X = pd.get_dummies(X, columns=['Store7'], drop_first=True)
# 添加回归常数项
X = sm.add_constant(X)

# 拟合逻辑回归模型
model = sm.Logit(y, X).fit()

# 整理为类似broom::tidy()的结构化DataFrame
coef_df = pd.DataFrame({
    'term': model.params.index,
    'estimate': model.params.values,
    'std.error': model.bse.values,
    'statistic': model.tvalues.values,
    'p.value': model.pvalues.values
})
", convert = TRUE)$coef_df

## 用gt格式化结果,与R原生glm输出风格一致
py_coef_df %>%
  gt()

## 对比R原生glm的输出效果
glm(Purchase ~ PriceCH + SpecialCH + Store7,
    data = test_data,
    family = binomial()) %>%
  tidy() %>%
  gt()

关键修改说明

  • 移除CSV中转:通过r.test_data让Python直接访问R环境中的数据集,省去文件读写步骤
  • 结构化结果返回:在Python中将模型的系数、标准误、统计量、p值整理为DataFrame,R通过convert = TRUE自动转为data.frame格式
  • 兼容R的可视化流程:返回的DataFrame结构与broom::tidy()输出一致,可直接用gt包格式化,完美适配Quarto文档需求

内容的提问来源于stack exchange,提问作者Justas Mundeikis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 16:17:46