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

如何在RStudio中实现R脚本与Python脚本的跨语言变量互相调用

RStudio中R与Python脚本跨语言调用变量的实现方法

你可以通过两种主流方案实现该需求,分别是实时会话互通和中间文件持久化互通:

方案1:使用reticulate包实现实时变量互通(推荐)

reticulate是R官方维护的R-Python互操作工具包,原生适配RStudio环境,可实现同一会话下两类变量的实时调用:

  • 第一步:在R环境中安装并配置reticulate
    首先在r_script.R中运行以下代码完成安装加载:
    install.packages("reticulate")
    library(reticulate)
    # 指定你要使用的Python解释器路径,也可使用use_condaenv()指定conda环境
    use_python("/usr/local/bin/python3") # 替换为你本地的Python路径
    
  • R侧调用Python变量:
    在Python_script.py中定义并保存变量后,在r_script.R中通过py$前缀直接调用Python全局变量,示例如下:
    # Python_script.py中代码
    py_list = [1,3,5,7]
    py_df = pd.DataFrame({"col1":[1,2], "col2":["a","b"]})
    
    # r_script.R中调用代码
    r_get_list <- py$py_list
    r_get_df <- py$py_df
    
  • Python侧调用R变量:
    在r_script.R中定义并保存变量后,在Python_script.py中通过r.前缀直接调用R全局变量,示例如下:
    # r_script.R中代码
    r_vector <- c(2,4,6,8)
    r_df <- data.frame(col1 = c(3,4), col2 = c("c","d"))
    
    # Python_script.py中调用代码
    py_get_vector = r.r_vector
    py_get_df = r.r_df
    

方案2:通过通用中间文件实现持久化互通

如果需要跨会话共享变量,或者传递大型数据集,可使用跨语言兼容的存储格式作为中间载体,推荐使用Feather/Parquet格式(读写速度快、支持完整数据类型适配):

  • 所需依赖:R侧安装arrow包,Python侧安装pandas和pyarrow库
  • R侧存、Python侧读示例:
    # r_script.R中保存变量
    library(arrow)
    write_feather(r_df, "shared_data.feather")
    
    # Python_script.py中读取变量
    import pandas as pd
    py_df = pd.read_feather("shared_data.feather")
    
  • Python侧存、R侧读示例:
    # Python_script.py中保存变量
    import pandas as pd
    py_df.to_feather("shared_data.feather")
    
    # r_script.R中读取变量
    library(arrow)
    r_df <- read_feather("shared_data.feather")
    

注意事项

  • 若使用reticulate实时互通,需保证两个脚本都在同一个RStudio会话中运行,跨窗口会话无法共享变量
  • 部分语言专属类型(如R的因子类型、Python的numpy自定义对象)跨语言传递时可能出现转换异常,建议提前转为通用的数值、字符串、数据框类型再传递
  • 使用中间文件时,建议写绝对路径,或保证两个脚本的工作目录一致,避免出现文件找不到的问题

内容的提问来源于stack exchange,提问作者Callum Brown

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 01:18:04