J'essaie d'utiliser le paquet data.table dans mon propre paquet. Le MWE est le suivant :
Je crée une fonction, test.fun, qui crée simplement un petit objet data.table, puis additionne la colonne "Val" en la regroupant par la colonne "A". Le code est le suivant
test.fun<-function ()
{
library(data.table)
testdata<-data.table(A=rep(seq(1,5), 5), Val=rnorm(25))
setkey(testdata, A)
res<-testdata[,{list(Ct=length(Val),Total=sum(Val),Avg=mean(Val))},"A"]
return(res)
}
Lorsque je crée cette fonction dans une session R normale, puis que j'exécute la fonction, elle fonctionne comme prévu.
> res<-test.fun()
data.table 1.8.0 For help type: help("data.table")
> res
A Ct Total Avg
[1,] 1 5 -0.5326444 -0.1065289
[2,] 2 5 -4.0832062 -0.8166412
[3,] 3 5 0.9458251 0.1891650
[4,] 4 5 2.0474791 0.4094958
[5,] 5 5 2.3609443 0.4721889
Lorsque je place cette fonction dans un paquet, que j'installe le paquet, que je charge le paquet, puis que j'exécute la fonction, j'obtiens un message d'erreur.
> library(testpackage)
> res<-test.fun()
data.table 1.8.0 For help type: help("data.table")
Error in `[.data.frame`(x, i, j) : object 'Val' not found
Quelqu'un peut-il m'expliquer pourquoi cela se produit et ce que je peux faire pour y remédier ? Toute aide est la bienvenue.
15 votes
Je pense que vous n'avez pas déclaré de dépendance. Vous devriez supprimer
library(data.table)
de votre fonction, et déclarezdepends:data.table
dans votre espace de noms et votre DESCRIPTION.1 votes
Il y a aussi maintenant le
.datatable.aware = TRUE
pour traiter cette question, comme indiqué dans ce et dans le vignette liés ci-dessous. DéclarerDepends: data.table
attachera l'ensemble du paquet au chemin de recherche, ce qui est parfois découragé .