web-dev-qa-db-fra.com

dossiers inst et extdata dans R Packaging

Dans la documentation, R suggère que les fichiers de données brutes (pas Rdata ni Rda) soient placés dans inst/extdata/

Du premier paragraphe de: http://cran.r-project.org/doc/manuals/R-exts.html#Data-in-packages

Le sous-répertoire de données est destiné aux fichiers de données, à mettre à disposition via le chargement différé ou à charger à l'aide de data (). (Le choix est fait par le champ 'LazyData' dans le fichier DESCRIPTION: la valeur par défaut est de ne pas le faire.) Il ne doit pas être utilisé pour les autres fichiers de données nécessaires au package, et la convention a grandi pour utiliser le répertoire inst/extdata pour ces fichiers.

J'ai donc déplacé toutes mes données brutes dans ce dossier, mais lorsque je crée et recharge le package, puis j'essaie d'accéder aux données dans une fonction avec (par exemple):

read.csv(file=paste(path.package("my_package"),"/inst/extdata/my_raw_data.csv",sep="")) 
# .path.package is now path.package in R 3.0+

J'obtiens l'erreur "impossible d'ouvrir le fichier".

Cependant, il semble qu'il existe un dossier appelé /extdata dans le répertoire du package avec les fichiers qu'il contient (post-construction et installation). Qu'arrive-t-il au /inst dossier?

Est-ce que tout dans le dossier/inst est poussé dans le / du colis?

43
Brandon Bertelsen

Vous étiez tous les deux très proches et aviez essentiellement cela. Une référence formelle de "Writing R Extensions" est:

1.1.3 Sous-répertoires de packages

[...]

Le contenu du sous-répertoire inst sera copié récursivement dans le répertoire d'installation. Les sous-répertoires de inst ne doivent pas interférer avec ceux utilisés par R (actuellement, R, data, demo, exec, libs, man, help, html et Meta, et les versions antérieures utilisaient latex, R-ex). La copie de inst se produit après que src est construit afin que son Makefile puisse créer des fichiers à installer. Avant la version R 2.12.2, les fichiers étaient installés sur les plates-formes POSIX avec les autorisations dans les sources du package, il faut donc veiller à ce qu'ils ne soient pas trop restrictifs: R CMD build fera les ajustements appropriés. Pour exclure les fichiers de l'installation, on peut spécifier une liste de motifs d'exclusion dans le fichier .Rinstignore dans le répertoire source de niveau supérieur. Ces modèles doivent être des expressions régulières de type Perl (voir l'aide de regexp dans R pour les détails précis), une par ligne, à mettre en correspondance (10) avec les chemins de fichier et de répertoire, par ex. doc/.*[.]png$ exclura tous les fichiers PNG dans inst/doc basé sur l'extension (en minuscules).

33
Dirk Eddelbuettel

Plus utile que d'utiliser file.path serait d'utiliser system.file. Une fois votre package installé, vous pouvez récupérer votre fichier comme suit:

fpath <- system.file("extdata", "my_raw_data.csv", package="my_package")

fpath aura désormais le chemin absolu sur votre disque dur vers le fichier.

63
Steve Lianoglou