Bonjour,

Envoyé par
Matthieu76
1 2 3 4 5 6 7 8
| # ...
* checking package dependencies ... ERROR
Package required but not available: 'Rcpp'
See section 'The DESCRIPTION file' in the 'Writing R Extensions'
manual.
* DONE
Status: 1 ERROR |
[...] Et j'ai bien mit Imports: Rcpp (>= 0.12.3) dans le fichier DESCRIPTION et import(Rcpp) dans le fichier NAMESPACE [...]
RShowDoc("R-exts"), pp. 104-5 :
5.4.2 Linking to native routines in other packages
A package that wishes to make use of header files in other packages needs to declare them as a comma-separated list in the field ‘LinkingTo’ in the DESCRIPTION file. This then arranges that the include directories in the installed linked-to packages are added to the include paths for C and C++ code. It must specify
4 ‘Imports’ or ‘Depends’ of those packages, for they have to be loaded
5 prior to this one (so the path to their compiled code has been registered).
_
4 whether or not ‘LinkingTo’ is used.
5 so there needs to be a corresponding import or importFrom entry in the NAMESPACE file.
Selon cet extrait, il vous manque
- dans DESCRIPTION, le champ LinkingTo: Rcpp ;
- dans NAMESPACE, une bonne spécification de ce dont vous avez besoin de Rcpp, en l’occurrence importFrom(Rcpp,sourceCpp).
Ces remarques seront valides seulement si les autres facettes de l'utilisation du C+++ dans un paquet sont bien gérées, notamment :
- la création sans erreur des fichiers RcppExports.cpp et RcppExports.R ;
- le cas échéant, une bonne gestion de l'export des membres définis en C++ ;
- .onUnload, etc.
Si vous ne l'utilisez déjà, devtools est un outil impeccable pour automatiser ce genre de tâches. Le paquet va bien avec le bouquin de son mainteneur.
Ici-bas, un exemple d'un paquet écrit à l'arrache à l'aide de devtools.
Je signale d'emblée que je n'ai pas testé s'il n'y a pas de souci avec Windows : sessionInfo()R version 3.2.4 Revised (2016-03-16 r70336)
Platform: x86_64-redhat-linux-gnu (64-bit)
Running under: Fedora 23 (Workstation Edition)
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
ls ./ && printf "\n*****\n\n" && cat DESCRIPTION && printf "\n*****\n\n" && cat NAMESPACE
DESCRIPTION LICENSE man NAMESPACE R src
*****
Package: ExempleCpp
Title: Call C++ Code From Within R Code
Version: 1.0-0
Authors@R: person(
given = "Foo", family = "Bar", email = "foo.bar@woe.com",
role = c("aut", "cre"))
Description: How to easily use C++ Inside R.
Depends:
R (>= 2.14)
License: BSD_3_clause + file LICENSE
LazyData: true
Encoding: UTF-8
Type: Package
Date: Monday 28 March 2016
LinkingTo: Rcpp
Imports:
Rcpp
Collate:
'RcppExports.R'
'zzz.R'
'foo.R'
'packDoc.R'
RoxygenNote: 5.0.1
*****
# Generated by roxygen2: do not edit by hand
export(makeUsageOfIt)
export(timesTwo)
importFrom(Rcpp,sourceCpp)
useDynLib(ExempleCpp)
Parmi les fichiers se trouvant dans le répertoire src, le seul que j'ai manuellement édité est times_two.cpp ; il contient ceci :
ls src/ && printf "\n*****\n\n" && cat src/times_two.cpp
ExempleCpp.so RcppExports.cpp RcppExports.o times_two.cpp times_two.o
1 2 3 4 5 6 7 8 9 10 11 12
| //' Multiply a number by two
//'
//' This is a simple example of ...
//'
//' @param x a single integer
//'
//' @export
//'
// [[Rcpp::export]]
NumericVector timesTwo(NumericVector x) {
return x * 2;
} |
J'ai mis en attachement le contenu du répertoire R dont le fichier RcppExports.R est généré automatiquement.
foo.R packDoc.R RcppExports.R zzz.R
Le contenu du répertoire man est automatiquement généré (idem avec le fichier NAMESPACE comme indiqué dans les sorties plus haut).
Lorsque cette hiérarchie de fichiers/dossiers est mise en place, check dira quelque chose du genre :
[...]
* checking Rd contents ... OK
* checking for unstated dependencies in examples ... OK
* checking line endings in C/C++/Fortran sources/headers ... OK
* checking compiled code ... OK
* checking examples ... NONE
* checking PDF version of manual ... OK
* DONE
Status: OK
Essayez avec ça et adaptez-le à votre guise, ça devrait le faire même sur Windows.
Partager