Estoy usando una Mac. La función path.expand son varias carpetas eliminadas de mi directorio de trabajo deseado. Por ejemplo:

path.expand ('~')

[1] "/Usuarios/mi.nombre"

Me gustaría cambiarlo a algo como esto:

path.expand ('~')

[1] "/Users/my.name/drive/R/project/sub.folder"

¿Cómo puedo hacer esto?

Gracias.

1
elliot 20 feb. 2018 a las 22:45

2 respuestas

La mejor respuesta

La tilde es, en todo unix-sen (incluido macos), especial en el sentido de que se refiere a lo que el sistema operativo considera el directorio de inicio (a través de env var HOME).

Hay dos tipos de respuestas a esto. Se puede hacer? Quizás, incluso seguro. ¿Debería hacerse? Es probable que haya consecuencias no deseadas (que pueden ser difíciles de solucionar o solucionar), por lo que probablemente no.

Esto funciona en mi caja de ubuntu:

me@mybox:/some/path$ Rscript -e 'Sys.getenv("HOME")'
[1] "/home/me"
me@mybox:/some/path$ HOME=/tmp/ Rscript -e 'Sys.getenv("HOME")'
[1] "/tmp/"
me@mybox:/some/path$ Rscript -e 'Sys.setenv(HOME="/tmp/");Sys.getenv("HOME")'
[1] "/tmp/"

(Esto, en particular, no funciona tan bien en Windows ... ¡lo cual no es muy sencillo!)

Entonces puedes intentar anularlo con:

  1. Sys.setenv(HOME = "/Users/my.name/drive/R/project/sub.folder"), o
  2. Configure la variable HOME en su entorno de trabajo antes de iniciar R.

Esto podría tener consecuencias no deseadas. Por ejemplo, R busca ~/.Rprofile, y git y los comandos buscan ~/.gitconfig y demás.

Mi camino a seguir recomendado sería definir una variable y cambiar allí. Si usa RStudio, sus "Proyectos" siempre pueden iniciarlo en el directorio correcto. Si no es así y aún desea que este "directorio especial" esté disponible para usted, tal vez agregue esto a su /Users/username/.Rprofile (en su homedir "real")

.specialdir <- "/Users/my.name/drive/R/project/sub.folder"

Y, siempre que necesite ir allí, use file.expand(.specialdir). Un efecto secundario de esto es que cualquiera de su código, funciones, informes, lo que sea que use esto, ya no será reproducible.

4
r2evans 20 feb. 2018 a las 20:01

Una forma de hacer referencia fácilmente a sus archivos sin necesidad de cambiar el directorio INICIO es usar el paquete here. Básicamente, esto utiliza una heurística para encontrar el directorio de trabajo correcto según la ubicación de su script. Normalmente busca archivos de proyecto RStudio (.rproj) o un archivo .git si su directorio de trabajo es un repositorio git. Es fácil de usar y robusto para mover máquinas o el uso accidental de setwd, o incluso para olvidar configurar HOME en una máquina / perfil diferente.

Si su archivo de datos some_data.csv anterior está almacenado en /Users/my.name/drive/R/project/sub.folder/some_data.csv, donde project es la carpeta raíz del proyecto:

here::here()
[1] "/Users/my.name/drive/R/project"
here::here("sub.folder", "some_data.csv")
[1] "/Users/my.name/drive/R/project/sub.folder/some_data.csv"

Y puede usarlo como reemplazo directo de la ruta, como en:

data <- read_csv(here::here("sub.folder", "some_data.csv"))
1
Calum You 20 feb. 2018 a las 21:11