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

R包无法访问inst文件夹内文件的问题排查与解决

更新:问题已解决

修复后的代码如下:

x <- tolower(name) 
sysloc <- system.file(package="RanglaPunjab") 
x <- paste(sysloc,"/img/",x,".jpg", sep="") 
jj <- readJPEG(x,native=TRUE) 
plot(0:1,0:1,type="n",ann=FALSE,axes=FALSE) 
rasterImage(jj,0,0,1,1)

问题背景

我按照教程创建了R包RanglaPunjab,知道inst文件夹里的文件会完整保留在最终包中,所以把ShowPalettePhoto(name)函数需要的图片放在了inst/img目录下。本地安装包后,img文件夹和R文件夹处于同一层级。

最初我用这段代码访问图片:

x <- paste("./img/",x,".jpg", sep="") 
jj <- readJPEG(x,native=TRUE) 
plot(0:1,0:1,type="n",ann=FALSE,axes=FALSE) 
rasterImage(jj,0,0,1,1)

结果运行时出现错误:

Error in readJPEG(x, native = TRUE) : unable to open ./img/teej.jpg

系统文件目录截图

错误原因及解释

你最初的代码问题出在相对路径的使用方式上:

  • ./img/xxx.jpg这种相对路径是基于当前R会话的工作目录,而不是包安装后的实际路径。当用户加载你的包运行函数时,他们的工作目录几乎不可能刚好是包的安装目录,自然找不到图片文件。
  • R包中访问内部资源的标准做法是用system.file()函数,它会自动定位到包安装后的根目录,不管用户当前工作目录在哪里,都能精准拼接出图片的正确路径——这也是你后来修复代码时用到的方法。

简单总结:包内资源绝对不能依赖相对路径,必须用system.file()来获取包的安装路径,再拼接资源路径,这样才能保证函数在任何环境下都能正常工作。

内容的提问来源于stack exchange,提问作者Artie Ladie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:49:48