gpt4 book ai didi

r - 使用子目录使用 knitr

转载 作者:行者123 更新时间:2023-12-03 13:00:17 26 4
gpt4 key购买 nike

我有一个项目文件夹,这是我的工作目录。我们称之为项目。项目文件夹下有4个子目录:code , data , figures , 和 documents .

我想把我的.Rmd code 中的文件子目录。我希望这些数字进入 figures子目录。我想要 .html , .md , 和 .docx要进入 documents 的文件子目录。我想从 data 读取我的数据子目录。这种组织结构可能吗?我似乎无法让它工作。

我首先将工作目录设置为 project因为我知道 knitr 会查看带有 .Rmd 的文件夹如果未指定,则将其视为工作目录。

```{r setglobal, cache = FALSE, include = TRUE}
library(knitr)
opts_knit$set(root.dir = "..")
```

然后我尝试设置相对于工作目录的图形路径。
```{r setchunk, cache=FALSE, include=TRUE}
opts_chunk$set(fig.path = "./figures/")
getwd()
```

工作目录正确报告为 project .从 data 正确读取数据子目录。所有输出都正确呈现,所有代码都运行。
```{r readdata}
crctx <- readRDS("./data/crctx.rds")
getwd()
*run lots of analyses here*
```

但这些数字最终出现在 project/code/figures目录而不是 project/figures .

我也试过设置 base.dir但这似乎并没有改变任何东西。我添加了参数
base.dir = "./figures" 

opts_knit$set列表。我什至尝试对完整路径进行硬编码。但似乎没有什么能够改变这一点。

我正在使用 R 3.10 和 RStudio 0.98.953。这是 Mac 0SX 10.9.4。

我错过了什么吗?有没有办法将输出文件放在他们自己的目录中?

这很重要的原因是我希望我们公司都使用相同的目录结构,这将使我们能够更好地组织我们的项目。

提前感谢您的帮助。

更新:

我意识到 opts_chunk$set(fig.path = "./figures/")是不正确的。我假设使用 opts_knit$set(root.dir = normalizePath("../")) 将根目录设置为项目文件夹将对 knitr 进行全局更改,因为这是它应该做的。它确实适用于数据子目录,现在可以使用 "./data" 访问这允许代码运行。但是,全局设置不适用于图形输出。因此,正确的规范是 opts_chunk$set(fig.path = "../figures/") -- 使用 ../而不是 ./ .我认为 Richie Cotton 解决了这个问题,但我有一段时间没看出来。

我还使用 OSX 中的终端从 project/documents 创建符号链接(symbolic link)至 project/code/figure这是由 knitr 默认创建的。有了这个,knitr 寻找正确的子目录,但一切都在 projects/documents .这真的很好。我无法让 R 使用 file.symlink 正确创建符号链接(symbolic link)。但它在终端中运行良好。去搞清楚。

更新 2 :

我也得到了输出文件。您必须直接使用 knit 命令。正文如下。

Knitr 代码在代码/分析中使用 .Rmd 编​​织 Markdown 文档并在输出/报告中输出:
knit("./code/knitr_file.Rmd", "./documents/knitr_output.md”)
将 .md 文件转换为 .docx 的 Pandoc 代码 - 使用与 .md 文件相同的文件夹 pandoc("./documents/knitr_output.md", format = "docx”)
输出样式(来自 knitr 文档)
pandoc('knitr_output.md', format='html') # HTML
pandoc('knitr_output.md', format='latex') # LaTeX/PDF
pandoc('knitr_output.md', format='docx') # MS Word
pandoc('knitr_output.md', format='odt') # OpenDocument

最佳答案

试试这个。它假定您在工作目录 project 中列出了 4 个文件夹.它还假设您有 .csv名为 myData.csv 的文件在 data .

编织文件时,绘图将保存在 figures .最后,代码查找 html code 中的文件并将它们移至 documents .可能有更好的方法来做到这一点。

```{r setup}
library(knitr)
opts_knit$set(root.dir=normalizePath('../'))
opts_chunk$set(fig.path = "../figures/", dev='pdf') # corrected path and added dev
```

```{r import}
dat <- read.csv("data/myData.csv")
```

```{r plot}
# pdf(file="figures/test.pdf") # I do this in setup instead
plot(dat)
# dev.off()
```

```{r move}
files <- list.files("code/")
index <- grep("html", files)
file.rename(file.path("code", files[index]),
file.path("documents", files[index]))
```

关于r - 使用子目录使用 knitr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24585254/

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