【问题标题】:Can knitr source a script which sources a script from another folder?knitr 可以获取从另一个文件夹获取脚本的脚本吗?
【发布时间】:2017-03-20 21:57:09
【问题描述】:

我有一个项目,我将 .rmd 文件放在名为 docs 的单独文件夹中。我的 R Markdown 文档如下所示:

---
title: "test"
output: pdf_document
---
## R Markdown
```{r summary}
knitr::opts_knit$set(root.dir = normalizePath("../"))
source('../test.R')
```

我的 test.R 脚本位于根文件夹中,如下所示:

source('helloWorld.R')
print("Hello World")

helloWorld.R 脚本如下所示:

print("Hello World from separate script")

我的两个问题是:

  1. 将根目录设置为“..”后,为什么还要使用“../”来引用test.R

  2. 为什么源中的源会失败?如果我省略 test.Rsource 部分,上述脚本可以正常工作?

【问题讨论】:

  • 源总是相对于当前工作目录,而不是文件本身。如果你想从同一个文件中获取,也许可以试试这个答案的解决方案:stackoverflow.com/questions/42815889/…
  • @MrFlick 我很欣赏这个解决方法:如果我不知道如何在我的 R Markdown 脚本中设置工作目录,我可能会使用它。
  • setwd 将在 rmarkdown 中工作,尽管 knitr 可能会警告您使用它并会在块的末尾更改回来。在回答您的第一个问题时,knitr 的 root_dir 是一个特定于 knitr 的选项 - 它可能不会直接更改工作目录。
  • @dash2 你是对的!谢谢你。如果我将 .rmd 文件中的两行 R 代码替换为 setwd('..')source('test.R'),我的脚本实际上可以正常工作。
  • @dash2 您能否将您的评论放入答案中,以便我将其投票为正确答案?

标签: r knitr


【解决方案1】:

setwd 将在 rmarkdown 中工作,尽管 knitr 可能会警告您使用它并会在块的末尾更改回来。在回答您的第一个问题时,knitr 的 root_dir 是特定于 knitr 的选项 - 它可能不会直接更改工作目录。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-14
    • 2014-04-03
    • 1970-01-01
    • 1970-01-01
    • 2011-10-15
    • 1970-01-01
    相关资源
    最近更新 更多