On 05/03/2021 8:27 a.m., Martin Møller Skarbiniks Pedersen wrote:
Hi,

   I am converting a couple of functions into a R-package. Many of the
functions use data.table.
   I have two questions using data.table in my own package.
   Normally I would put each question in separate emails but I think they
might be connected.

First question is short and I think the answer is yes.
1. Do I always need to prefix data.table each time I use something from
that package?
Eg. DT <- data.table::data.table(x=rep(c("b","a","c"),each=3), y=c(1,3,6),
v=1:9)

No, you could import that function. This is done in the NAMESPACE file. If you're using roxygen2, you can put in comments that will write the appropriate lines to NAMESPACE.


Second question is longer.
2.  In this small example code:
hello <- function() {
   DT <- data.table::data.table(x=rep(c("b","a","c"),each=3), y=c(1,3,6),
v=1:9)
   DT[, .(sum(v))]
}

I get these warnings from R CMD check:
hello: no visible global function definition for ‘.’
hello: no visible binding for global variable ‘v’
Undefined global functions or variables:
   . v

According to: vignette("datatable-importing", package = "data.table")
The solution is
hello <- function() {
   v <- NULL
   . <- NULL

And it works but looks a bit weird.
Is there a better solution?

The problem is that data.table is using non-standard evaluation. Syntactically it looks like it is referencing global variables, but in fact it is not, and you need to tell the testing code that what you are doing is okay.

The suggestion of assigning NULL to the variables is one way. Another is to declare . and v as global variables using

 globalVariables(c(".", "v"))

outside of your function, and that will suppress warnings about them.

You could also put the NULL assignments outside the function and it would have the same effect. (You don't want to export those variables, so be careful with your NAMESPACE file.)

Duncan Murdoch

______________________________________________
R-package-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-package-devel

Reply via email to