studio para online mac instalar gratuita full descargar descarga como actualizar r rstudio

para - r-studio full



Obtener el camino del script actual (5)

Actualización agosto 2018

TLDR : el paquete here ayuda a crear una ruta desde la carpeta raíz del proyecto, sin importar en qué parte de la carpeta busque los scripts de R o los documentos de Rmd.

El paquete here permanece disponible en CRAN. La versión de desarrollo se ha movido a github.com/r-lib/here . Los puntos mencionados en los sitios citados a continuación siguen siendo válidos.

Respuesta anterior

Lea la Oda al paquete aquí :

¿Tiene usted: setwd () en sus scripts? POR FAVOR DEJA DE HACER ESO. Esto hace que su script sea muy frágil, conectado a una sola vez y lugar. Tan pronto como renombras o mueves directorios, se rompe. O tal vez tienes una nueva computadora? O tal vez alguien más necesita ejecutar su código?

[...]

Presentación clásica de problemas: incomodidad en la creación de rutas y / o configuración de directorios de trabajo en proyectos con subdirectorios. Especialmente si usa R Markdown y knitr, lo que hace que muchas personas con su comportamiento predeterminado de "directorio de trabajo = directorio donde vive este archivo". [...]

Instala el paquete here :

install.packages("here") library(here) here() here("construct","a","path")

Documentación de la función here() :

Comenzando con el directorio de trabajo actual durante el tiempo de carga del paquete, aquí se moverá hacia arriba la jerarquía de directorios hasta que encuentre un directorio que satisfaga al menos una de las siguientes condiciones:

  • contiene un archivo que coincide [.] Rproj $ con contenido que coincide con ^ Versión: en la primera línea
  • [... otras opciones ...]
  • contiene un directorio .git

Una vez establecido, el directorio raíz no cambia durante la sesión activa de R. Aquí () luego agrega los argumentos al directorio raíz.

La versión de desarrollo del paquete aquí está disponible en github .

Me gustaría establecer el directorio de trabajo en la ruta del script actual mediante programación, pero primero necesito obtener la ruta del script actual.

Así que me gustaría poder hacer:

current_path = ...retrieve the path of current script ... setwd(current_path)

Al igual que el menú RStudio:

Hasta ahora he intentado:

initial.options <- commandArgs(trailingOnly = FALSE) file.arg.name <- "--file=" script.name <- sub(file.arg.name, "", initial.options[grep(file.arg.name, initial.options)]) script.basename <- dirname(script.name)

script.name devuelve NULL

source("script.R", chdir = TRUE)

Devuelve : Error en el archivo (nombre de archivo, "r", codificación = codificación): no se puede abrir la conexión Además: Mensaje de advertencia: en archivo (nombre de archivo, "r", codificación = codificación): no se puede abrir el archivo ''/script.R'' : El fichero o directorio no existe

dirname(parent.frame(2)$ofile)

Devuelve : Error en dirname (parent.frame (2) $ ofile): se esperaba un argumento de vector de caracteres ... porque parent.frame es nulo

frame_files <- lapply(sys.frames(), function(x) x$ofile) frame_files <- Filter(Negate(is.null), frame_files) PATH <- dirname(frame_files[[length(frame_files)]])

Devuelve : Nulo porque frame_files es una lista de 0

thisFile <- function() { cmdArgs <- commandArgs(trailingOnly = FALSE) needle <- "--file=" match <- grep(needle, cmdArgs) if (length(match) > 0) { # Rscript return(normalizePath(sub(needle, "", cmdArgs[match]))) } else { # ''source''d via R console return(normalizePath(sys.frames()[[1]]$ofile)) } }

Devuelve : Error en path.expand (ruta): argumento ''ruta'' no válido

También vi todas las respuestas desde here , here , here y here . Sin alegría.

Trabajando con RStudio 1.1.383

EDITAR: Sería genial si no hubiera necesidad de una biblioteca externa para lograr esto.


En RStudio, puede obtener la ruta al archivo que se muestra actualmente en el panel de origen usando

rstudioapi::getSourceEditorContext()$path

Si solo quieres el directorio, usa

dirname(rstudioapi::getSourceEditorContext()$path)

Si desea el nombre del archivo que se ha ejecutado por source(filename) , es un poco más difícil. srcfile buscar la variable srcfile algún lugar de la pila. ¿Qué tan atrás depende de cómo escribes las cosas, pero es alrededor de 4 pasos atrás? Por ejemplo,

fi <- tempfile() writeLines("f()", fi) f <- function() print(sys.frame(-4)$srcfile) source(fi) fi

Debería imprimir lo mismo en las dos últimas líneas.


Otra opción para obtener la ruta del script actual es funr::get_script_path() y no necesita ejecutar su script usando RStudio.


Si está ejecutando un Rscript a través de la línea de comandos, etc.

Rscript /path/to/script.R

La siguiente función asignará este this_file a /path/to/script

library(tidyverse) get_this_file <- function(){ commandArgs() %>% tibble::as.tibble() %>% tidyr::separate(col=value, into=c("key", "value"), sep="=", fill=''right'') %>% dplyr::filter(key == "--file") %>% dplyr::pull(value) } this_file <- get_this_file()


Actualización de marzo de 2019

Basado en las respuestas de Alexis Lucattini y user2554330, para que funcione tanto en la línea de comandos como en RStudio. También resolviendo el mensaje desaprobado "as_tibble"

library(tidyverse) getCurrentFileLocation <- function() { this_file <- commandArgs() %>% tibble::enframe(name = NULL) %>% tidyr::separate(col=value, into=c("key", "value"), sep="=", fill=''right'') %>% dplyr::filter(key == "--file") %>% dplyr::pull(value) if (length(this_file)==0) { this_file <- rstudioapi::getSourceEditorContext()$path } return(dirname(this_file)) }