tutorial - sweave r
Error "no se puede abrir la conexión" al ejecutar "tejer HTML" en RStudio (6)
A veces es molesto para la ruta de ejecución del archivo Rmd, especialmente cuando el archivo rmd no se almacena en la carpeta raíz de un proyecto. Normalmente almaceno rmd en la carpeta Informe para evitar todos los archivos temporales en la raíz del proyecto (por ejemplo, Informe / myreport.Rmd).
Por ejemplo, hay un archivo myfile.csv en la carpeta de Recursos. En el archivo rmd, necesito usar dos puntos para especificar la ruta del archivo:
read.csv(''../Resources/myfile.csv'')
Pero la ruta del archivo no es correcta si quiero probar mi código en la consola de un proyecto Rstudio, ya que el directorio de trabajo normal es la carpeta raíz del proyecto. Así que necesito quitar dos puntos de la ruta del archivo:
read.csv(''Resources/myfile.csv'')
Escribí una función simple para resolver este problema por mí mismo ( https://github.com/byzheng/rproject ). La función project_filepath generará una nueva ruta que es relativa a la carpeta raíz de un proyecto. Entonces, el directorio de trabajo podría ser cualquier subcarpeta en un proyecto. El siguiente código funcionará para el archivo Rmd y la consola.
library(rproject)
read.csv(project_filepath(''Resources/myfile.csv''))
Recibo el siguiente error cuando intento "tejer HTML" en RStudio.
|................................ | 50%
ordinary text without R code
|.................................................................| 100%
processing file: Preview-b0c112a265.Rmd
label: unnamed-chunk-1
Quitting from lines 16-26 (Preview-b0c112a265.Rmd)
Error in file(file, "rt") : cannot open the connection
Calls: <Anonymous> ... withVisible -> eval -> eval -> read.csv -> read.table -> file
Execution halted
Estoy utilizando RStudio en una máquina win8 de 64 bits.
Cuando ejecuta "Knit HTML", el código intenta encontrar el archivo que está leyendo en el mismo directorio donde se encuentra knitr
porque knitr
establece el directorio de trabajo en esa ruta. Por lo que veo tengo dos opciones.
- Intente especificar la ruta de acceso absoluta al archivo (no muy robusta, pero útil en algunos casos).
- Averiguar la ruta relativa al archivo. Si tiene su archivo
.Rmd
en/
y los datos en/data
, la ruta relativa debe ser, por ejemplo,read.table("./data/myfile.csv"...)
..
significa "aquí" (donde sea que estégetwd()
), dos puntos suben la estructura del directorio mientras se especifica que los directorios suben la estructura hacia abajo.
Debe establecer rutas absolutas o relativas a la carpeta de su proyecto como lo mencionan otros autores. También puede setwd (ruta).
Pero esto no es suficiente para mí. Por alguna razón, encuentro que necesito cargar todos mis datos en el primer bloque de comandos R en el archivo .Rmd, de lo contrario obtengo el mismo error que usted.
En otras palabras:
```{r}
setwd("/tmp/report")
# This load works
data1 <- read.csv("your_file.csv", sep = "/t")
````
some markdown text here ...
```{r}
# This load does not work, even if I do a setwd just before:
data1 <- read.csv("your_file.csv", sep = "/t")
````
Lo siguiente funcionó para mí: si tiene su proyecto (por ejemplo, un directorio llamado my_project
) organizado en algo como esto:
Y en la carpeta de scripts
tiene algún *.Rmd
( *.rmd
) o alguna *.r
comandos *.r
( *.r
) que le gustaría tejer / compilar como informe HTML ( CTRL + SHIFT + K
de RStudio), luego usted tiene las opciones:
- 1)
*.Rmd
archivo*.Rmd
, existe la opción de definir la ruta a su directorio de trabajo en la parte superior del archivo (consulte la Nota en la ayuda deknitr::knit
):
```{r setup, include=FALSE}
knitr::opts_knit$set(root.dir = ''../'')
# Or use multiple `../` if needed;
# One `../` means go one level up towards the root,
# here, moving from `scripts` folder to the root `my_project`
```
o usar el camino absoluto; aunque no se recomienda si compartirá su directorio / repositorio con colegas (en Windows, algo como C:/my/absolute/path/to/my_project
no funcionará en ninguna otra computadora y también fallará en la suya si mueve my_project
)
```{r setup, include=FALSE}
knitr::opts_knit$set(root.dir = ''absolute/path/to/my_project/'')
```
- 2) Tanto para la secuencia de comandos
*.Rmd
archivo*.Rmd
(aunque no se recomienda en la Nota de la ayuda deknitr::knit
), puedeknitr::knit
en la parte superior de su secuencia de comandos*.R
o en el fragmento de código de tu archivo*.Rmd
(donde lees algunos datos) algo como:
setwd(gsub(pattern = ''/scripts'', replacement = '''', x = getwd()))
Si ejecuta / ejecuta el script *.R
sin compilar (por ejemplo, al probar el script), no alterará la ruta getwd()
habitual, ya que no puede encontrar el patrón /scripts
. Al compilar en HTML, editará la ruta del directorio de trabajo eliminando la parte /scripts
de la path/to/my_project/scripts
Ambas opciones te permitirán seguir usando rutas relativas como:
read.csv(''data/my_data.csv'')
evitando algo como:
read.csv(''../data/my_data.csv'')
lo que puede ser complicado si desea probar sus controles antes de compilarlos en informes HTML.
No sé desde cuándo esto es parte de las opciones globales, pero como acabo de encontrarlo y no está escrito aquí: en las opciones globales -> Markdown, hay una configuración: "evaluar los fragmentos en el directorio" y cuando se usa "actual" o "Proyecto" funcionó al menos para mí (aparentemente está configurado como "documento" de forma predeterminada)
Para mí, fue simplemente el caso de no guardar mi archivo .Rmd aún ... Como se señaló anteriormente, el código está tratando de encontrar el archivo en el mismo directorio donde se encuentra .Rmd, y el .Rmd no existe , puede obtener este error.