Trouver l'emplacement du fichier .R actuel

J'ai regardé à travers de nombreuses questions similaire à ceci (voir en fin de post), mais je n'ai pas trouvé toutes les solutions qui en fait accomplir ce dont j'ai besoin. Je code sous Windows ou Fedora selon le projet, et je code pour les personnes qui utilisent Windows et plusieurs distributions Linux.

Partie de mon travail est de faire de la recherche de scripts pour les personnes qui automatiquement d'analyser des données et créer des graphiques. Le plus souvent, je vais juste envoyer le script et il va générer le graphique. De cette façon, si les modifications de données ou de l'expansion, je n'ai pas besoin de ré-exécuter le script pour eux (ils peuvent aussi apporter les changements nécessaires).

Le problème est que je ne sais pas comment faire pour avoir une R-script pour savoir où lui-même se trouve. Il serait très pratique de simplement être en mesure de créer un code qui fonctionne comme suit:

  1. Utilisateur enregistre le script dans le dossier contenant les données, puis exécute le script.
    • J'ai l'habitude de simplement un courriel à l'script de la personne que je suis travailler avec.
    • Ils enregistrez le script dans un dossier contenant les données qu'ils veulent analyser et/ou graphiques.
    • Idéalement, ils devraient lancer R, charge le script, puis exécutez le script.
  2. Script détermine son propre emplacement, puis définit que comme répertoire de travail.
  3. Script d'analyse de données à l'intérieur de son propre répertoire.
  4. Script génère un graphique(s) et les enregistre dans son propre répertoire.

Cette question ne traite que de l'Étape 2. Tout le reste découle bien aussi longtemps que je peux le faire. Il serait agréable d'avoir quelque chose comme:

setwd(FindThisScriptsLocation())

La ligne: source(..., chdir = T) a été suggéré icimais il ne peut pas être utilisé pour un script pour faire référence à lui-même, sauf si elle savait que son propre chemin.

Voici quelques questions connexes:

source d'informationauteur Will Beason