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

R包中Python脚本读取inst目录CSV文件报错的解决方法

问题解决方法

你的问题核心是R包安装后,inst/目录结构会被扁平化:原开发目录里的inst/data.csv在包安装完成后,会直接位于包的安装根目录下;而Python脚本里写的相对路径inst/data.csv是基于当前工作目录(而非包的安装路径),自然找不到目标文件。

下面是两种可行的解决方式:

方法一:从R传递数据文件路径给Python(推荐)

这种方式无需额外依赖,逻辑更直接:

  1. 修改R函数,先获取数据文件的绝对路径,再注入Python环境:
rfunction <- function() {
  # 获取包内data.csv的绝对路径
  data_path <- system.file("data.csv", package = "mypkg")
  # 将路径传递到Python全局环境
  reticulate::py_run_string(sprintf("data_path = '%s'", data_path))
  # 运行Python脚本
  reticulate::py_run_file(system.file("load_csv.py", package = "mypkg"))
}
  1. 修改Python脚本,直接使用传递过来的绝对路径:
import pandas as pd
my_df = pd.read_csv(data_path)

方法二:在Python中调用R的system.file获取路径

如果希望Python自行处理路径,可以通过reticulate调用R的函数获取包内文件路径(需确保环境已安装rpy2):

修改Python脚本如下:

import pandas as pd
import reticulate

# 调用R的system.file函数获取数据文件路径
r = reticulate.import_r()
data_path = r.system.file("data.csv", package="mypkg")[0]
my_df = pd.read_csv(data_path)

关键说明

  • R包构建完成后,inst/下的所有文件会被移动到包的安装根目录,因此代码中不能再用inst/作为路径前缀。
  • 两种方法的核心逻辑一致:获取数据文件的绝对路径,避免依赖不确定的相对路径。

内容的提问来源于stack exchange,提问作者Ben Nutzer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 11:52:46