Rmd 文件,该文件源一个 R 脚本,该脚本源另一个 R 脚本

Rmd file which sources an R script which sources another R script

提问人:NicolasBourbaki 提问时间:7/4/2023 最后编辑:Konrad RudolphNicolasBourbaki 更新时间:7/4/2023 访问量:55

问:

为了使我的代码模块化,我编写了一个用于绘制数据的 R 脚本,该脚本调用 R 脚本来准备数据(要绘制):

该文件包含一行,而此脚本又包含一行。document.Rmdsource('./R/customPlot.R')source('./prepareData.R')

运行给我一个未找到的错误消息,可以通过将脚本中的行更改为 )。document.Rmd./prepareData.RcustomPlot.Rsource('./R/prepareData.R

但是,在这种情况下,我不能再单独运行它来直观地检查其输出。customPlot.R

我的文件夹结构如下所示:

project/
  Rmd/
    document.Rmd   # calls source('./R/customPlot.R')
  R/
    customPlot.R   # calls source('./prepareData.R')
    prepareData.R

通过搜索网络,我了解到生成我的代码包可能是一个可能的解决方案。虽然我的项目有点大,但我想问一下它是否值得开销。毕竟,我项目中的大多数文件都是数据,实际上很少有代码。

r-package 组织 代码组织 r-devtools

评论

1赞 Konrad Rudolph 7/4/2023
R 对此没有好的内置解决方案。考虑使用现代模块系统,通过“盒子”。

答:

1赞 Grzegorz Sapijaszko 7/4/2023 #1

呵呵,有意思......

解决方案可能与功能有关,例如:here::here()

project/
  Rmd/
    document.Rmd  
      #'
      source(file = "../R/1.R")
      #'
  R/
    customPlot.R
      #' 
      source(file =  paste0(here::here(), "/R/prepareData.R"))
      #'
    prepareData.R

评论

0赞 NicolasBourbaki 7/4/2023
谢谢,这已经很有帮助了。当然,最好的解决方案是没有额外依赖项。
0赞 Grzegorz Sapijaszko 7/4/2023
然后移动 .Rmd 到文件夹,从子文件夹外。问题是,RStudio 项目使用他们的文件夹作为主/基本文件夹......projectRmdproject
0赞 NicolasBourbaki 7/4/2023
是的,这是一种可能性,尽管这会使代码组织变得不那么明显。
0赞 Konrad Rudolph 7/4/2023
不幸的是,这仅在用户从工作目录运行代码时才有效,即它不健壮。project/