sheet - rmarkdown for mac
Trabajando con knitr utilizando subdirectorios. (2)
Tengo una carpeta de proyectos, que es mi directorio de trabajo. Llamémoslo proyecto . Debajo de la carpeta del proyecto hay 4 subdirectorios: code
, data
, figures
y documents
.
Me gustaría poner mi archivo .Rmd
en el subdirectorio del code
. Me gustaría que las figuras entraran en el subdirectorio de figures
. Me gustaría que los .md
.html
, .md
y .docx
.md
en el subdirectorio de documents
. Me gustaría leer mis datos del subdirectorio de data
. ¿Es posible esta estructura organizativa? Parece que no puedo hacerlo funcionar.
Empiezo con esto para configurar el directorio de trabajo para que se project
porque entiendo que knitr busca la carpeta con el archivo .Rmd
y lo trata como el directorio de trabajo si no se especifica.
```{r setglobal, cache = FALSE, include = TRUE}
library(knitr)
opts_knit$set(root.dir = "..")
```
Luego trato de configurar la ruta de la figura relativa al directorio de trabajo.
```{r setchunk, cache=FALSE, include=TRUE}
opts_chunk$set(fig.path = "./figures/")
getwd()
```
El directorio de trabajo se reporta correctamente como project
. Los datos se leen correctamente desde el subdirectorio de data
. Toda la salida se representa correctamente y todo el código se ejecuta.
```{r readdata}
crctx <- readRDS("./data/crctx.rds")
getwd()
*run lots of analyses here*
```
Pero las cifras terminan en el directorio project/code/figures
lugar de project/figures
.
También he intentado configurar base.dir
pero eso no parece cambiar nada. Agregué el parametro
base.dir = "./figures"
a la lista de opts_knit$set
. Incluso intenté codificar el camino completo. Pero nada parece poder cambiar esto.
Estoy usando R 3.10 y RStudio 0.98.953. Esto es Mac 0SX 10.9.4.
¿Me estoy perdiendo de algo? ¿Y hay una manera de poner los archivos de salida en su propio directorio?
La razón por la que esto es importante es que me gustaría que nuestra empresa utilice la misma estructura de directorios, y esto nos permitirá organizar mejor nuestros proyectos.
Gracias de antemano por cualquier ayuda.
Actualizar:
Me doy cuenta de que opts_chunk$set(fig.path = "./figures/")
es incorrecto. Asumí que establecer el directorio raíz en la carpeta del proyecto usando opts_knit$set(root.dir = normalizePath("../"))
haría un cambio global a knitr, ya que eso es lo que se supone que debe hacer. Y funciona para el subdirectorio de datos, al que ahora se puede acceder con "./data"
que permite ejecutar el código. Sin embargo, la configuración global no se aplica a la salida de la figura. Por lo tanto, la especificación correcta es opts_chunk$set(fig.path = "../figures/")
- usando ../
lugar de ./
. Creo que Richie Cotton lo solucionó, y no lo vi por un tiempo.
También utilicé Terminal en OSX para crear un enlace simbólico de project/documents
a project/code/figure
que se crea de forma predeterminada por knitr. Con esto, knitr mira al subdirectorio derecho, pero todo termina en projects/documents
. Eso funcionó muy bien. No consigo que R cree el enlace simbólico correctamente usando file.symlink. Pero funciona bien en la Terminal. Imagínate.
actualización 2 :
Tengo los archivos de salida para trabajar también. Tienes que usar el comando knit directamente. El texto está abajo.
Knitr código para tejer un documento de rebaja con .Rmd en código / análisis y salida en salida / informes: knit("./code/knitr_file.Rmd", "./documents/knitr_output.md”)
Código de Pandoc para convertir el archivo .md a .docx: utiliza la misma carpeta que el archivo pandoc("./documents/knitr_output.md", format = "docx”)
Estilos de salida (de la documentación de 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
Prueba esto. Se supone que tiene las 4 carpetas que enumeró dentro del project
directorio de trabajo. También supone que tienes un archivo .csv
llamado myData.csv
en los data
.
Cuando teje el archivo, la trama se guardará en figures
. Al final, el código busca los archivos html
en el code
y los mueve a los documents
. Probablemente hay una mejor manera de hacer esto.
```{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]))
```
Yo uso este enfoque. Colóquelo al inicio de su archivo rmd, y podrá usar el código de ejecución en línea y la configuración de un proyecto RStudio. El truco es restablecer el directorio de inicio de knitr a su directorio de proyecto (el mío es un par del directorio de proyecto, por lo tanto, ''/../../'' pero se le ocurre la idea). También debe restablecer las rutas de figura y caché, de lo contrario, las salidas terminarán en lugares extraños.
Si juega con la configuración a continuación, puede crear la estructura de archivos adecuada para las necesidades de su proyecto.
```{r setup, include=FALSE}
###--- Update the knitr working directory (R works from the project folder, knitr works in the rmd folder)
dd <- getwd()
knitr::opts_knit$set(root.dir= paste(dd,''/../../''))
###--- Set some knitr defaults for all of the code blocks below.
knitr::opts_chunk$set(warning=FALSE
,error=FALSE
,message=FALSE
,cache=F
,eval=TRUE
,results=''asis''
,echo=TRUE
,fig.ext="png"
,cache.path = paste0(dd,''/cache/'')
,fig.path = paste0(dd,''/figures/'')
)
```