gpt4 book ai didi

r - 从主 .R 文件编织 .rmd 时在 .rmd block 中查找文件源时遇到问题

转载 作者:行者123 更新时间:2023-12-04 12:32:38 25 4
gpt4 key购买 nike

假设我有一个名为 testknit 的项目目录(我确实这样做了,请参阅 github 以获得 MRE),并且在其中我有几个子目录,包括 scripts我放在哪里.R.rmd文件。

在 RStudio 中,我创建了一个项目并选择了这个 testknit目录,这样当我打开项目时,工作目录是 mypath/testknit .

内部testknit/scripts我有一个 master.R文件。如果我想获取一个名为 testsource1.R 的文件, 这也在 testknit/scripts 中, 我可以运行 source("scripts/testsource1.R")来自内部 master.R .

library(knitr)
getwd()
# [1] "mypath/testknit"
source("scripts/testsource1.R")

到目前为止一切顺利。

但假设我还想织一个 .rmd名为 test.rmd 的文件位于 testknit/scripts .我可以运行 knit("scripts/test.rmd")来自 master.R .

我的 test.rmd文件执行以下操作:

```{r setup}
library(knitr)
opts_knit$set(root.dir='../')
```

```{r option1}
source("scripts/testsource2.R")
```

```{r option2}
source("testsource2.R")
```

test.rmd存在于 testknit/scripts 内, 我指定 opts_knit$set(root.dir='../')在第一个 block 中,所以 knitr 知道我的根目录实际上是一个级别。

当我打开 test.rmd在 RStudio 中单击 knit HTML ,不出所料,option1大块作品和option2大块没有。

但是当我尝试编织时 test.rmd通过运行 knit("scripts/test.rmd")来自 master.R而不是从 .rmd 内部编织文件,这两个 block 选项都不起作用。两者都返回错误,指出没有该名称的文件。

我做错了什么?为什么 R 找不到 testsource2.R编织 .rmd 时来自大师的文件 .R

请参阅上面的 github 链接以获取可重现的示例。

更新:

正如我在下面的评论中指出的那样,我尝试添加 wd <- getwd()就在opts_knit$set之前并更改了 (root.dir='../')(root.dir=wd) .所以当我运行 knit("scripts/test.rmd")来自 master.R ,选项 2 block 运行是因为 wd我添加了 gets 设置为 mypath/testknit/scripts .但是如果我打开 .rmd文件并运行所有 block ,wd设置为根目录,mypath/testknit ,并且 option1 block 运行。

我需要工作目录来保留项目根目录。这对我来说似乎不是一个优雅的解决方案,但改变了:

```{r setup}
library(knitr)
opts_knit$set(root.dir='../')
```

```{r setup}
library(knitr)
wd <- ifelse(basename(getwd())=="scripts",
gsub("/scripts", "", getwd()),
getwd())
opts_knit$set(root.dir=wd)
```

让我在 .rmd 中运行所有 block 文件或 knit("scripts/test.rmd")来自 master.R .它有效,但感觉我采用了错误的方法。

最佳答案

@Yihui:也许您可以使用normalizePath('../') 使../ 成为绝对路径。相对工作目录可能会令人困惑(至少在我阅读了太多级别的相对路径后我的头很痛:)。顺便说一句,当您在 RStudio 中编织 HTML 时,RStudio 首先将工作目录更改为输入 Rmd 文件。

我:是的!仅使用 opts_knit$set(root.dir=normalizePath('../')) 就可以从 master.R 编织 .rmd 文件> 并编织成 html 或从 .rmd 中运行所有 block 。我更新了 github example . test-b.rmd 现在显示了这一点。谢谢!

关于r - 从主 .R 文件编织 .rmd 时在 .rmd block 中查找文件源时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19882198/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com