在Rmd中寻找文件时遇到问题

时间:2019-05-24 15:04:43

标签: r

我无法将文件源到Rmd文件中。

我以前有源文件,无法弄清楚为什么这个文件不起作用。我的工作目录设置为正确的位置。我有一个名为projects的文件,其中有“ index.Rmd”文件,然后有一个包含包含“ chart_1.R”的文件夹“ scripts”。

所以我的工作流程将是项目->脚本。在项目中,我具有index.Rmd,在脚本中,我具有chart_1.R

source("scripts/chart_1.R")

我应该可以访问chart_1文件,但不能。

它给我错误“文件(文件,“ rt”)中的错误:无法打开连接”

1 个答案:

答案 0 :(得分:0)

2个解决方案...

首选解决方案

您是否尝试过here包裹?它只是为这样的事情而做的,它可能会解决问题。您的解决方案如下所示:

  • 安装软件包;它在CRAN上:install.packages("here")
  • 如果您不使用R项目,请通过在.here文件夹中添加一个名为projects的空白文件来定义“这里”的含义。
  • 使用如下代码:
source(here::here("scripts", "chart_1.R"))

或者,

library(here)
source(here("scripts", "chart_1.R"))

here的工作原理与file.path相似,因为它会生成文件路径。但是,根据docs中阐明的规则,它总是从您的基本目录开始。

对于您的特定问题,这也许算是过高了,但这是一个很棒的软件包,值得一试。它避免了使用绝对路径,如果其他人曾经下载projects文件夹来检查您的操作,则会使代码的再现性降低。

解决方法

至少在与选项knitr一起使用时,current_input函数.Rmd可以为您提供dir = TRUE文件的位置。 basename将使您从文件路径转到包含文件夹的位置。因此,您可以尝试以下解决方法:

source(file.path(basename(knitr::current_input(dir = TRUE)), "scripts", "chart_1.R"))