2011-08-28 35 views
10

Quiero ser capaz de source() un archivo que incluye un archivo diferente en su mismo directorio, pero yo no quiero tener que establecer el directorio de trabajo del R-confirmación antes de ejecutar este archivo:¿Determinar la ubicación actual del archivo en R para incluir el archivo en el mismo directorio?

> getwd() 
[1] "/Users/myser" 
> source("/Users/myuser/workspace/myproject/myfile.r") 

Dentro de/Users/myuser/workspace/myproject, habría myfile.r y my-utils.r. myfile.r llama al source('my-utils.r') desde dentro.

Otros lenguajes de programación pueden determinar la ruta del archivo actual. ¿Tiene R algo similar? Ejemplo:

cur_dir <- sys.get_current_file_path() 
source(file.path(cur_dir, "my-utils.r")) 

Respuesta

11
source("/Users/myuser/workspace/myproject/my-utils.r", chdir=TRUE) 

Cuando chdir opción se establece en true y el parámetro de archivo de origen es una ruta completa, el directorio de archivo se utilizará como directorio de trabajo, mientras que el archivo de aprovisionamiento.

NOTA: cur_dir <- sys.get_current_file_path() no tiene mucho sentido porque los nombres de ruta no son únicos.

+0

venció a mi por 30 segundos ... buena respuesta. –

+0

@Apprentice - mi nombre de función probablemente fue mal elegido. Lo que quise decir es algo así como este código de Python: os.path.realpath (\ _ \ _ file \ _ \ _) –

+1

El problema con este código/solución es que vincula la funcionalidad de esa llamada a 'fuente' a la existente en ese directorio específico. Sería bueno tener una solución que no dependiera de esto, como sería posible con el enfoque que Dolan estaba buscando con su pseudo ejemplo inspirado en python. corrígeme si me falta algo. – metasoarous

Cuestiones relacionadas