[R-pkg-devel] Detritus in temp directory - Note from submission of R package in CRAN

Duncan Murdoch murdoch@dunc@n @end|ng |rom gm@||@com
Sun Apr 19 00:02:17 CEST 2020


On 18/04/2020 5:55 p.m., Jeff Newmiller wrote:
> See below:
> 
> On Sat, 18 Apr 2020, David Andres Zamora Avila wrote:
> 
>> Thanks for your answers.
>> This a part of my script where it creates files and saves it in anything
>> path. I am not pretty secure how use file.path() or tempdir(). Can you give
>> me more details about it, please?
>>
>> if (!exists("path_pet")){
>>     path_pet <- getwd()
>>   } else if (!exists("path_p")){
>>     path_p <- getwd()
>>   } else if (!exists("path_p") | !exists("path_pet")){
>>     path_pet <- getwd()
>>     path_p <- getwd()
>>   }
> 
> The above code should not exist. You are making a package, so you are
> putting it into a function and either looking for the existence of global
> variables (side effects! requiring user to use special variable names!
> this is not good!), or the "path_pet" and "path_p" variables were created
> in your function and you should already know that they exist.
> 
> If we assume that "path_pet" and "path_p" are parameters to this package
> function you are writing, like so:
> 
> myfunc <- function( x, y, ..., path_pet = getwd(), path_p = getwd() ) {
>     ...
> }
> 
> then the user can let the default be the current working directory, or can
> specify which directories the function should work in. Specifically, when
> you are writing your examples or test code and pretending to be a user,
> you can create a temporary directory and use it like so:

I think your advice would probably pass the checks, but it's bad advice, 
because it leaves the user vulnerable to having files wiped out by 
myfunc().

Functions shouldn't write to the current directory unless the user 
explicitly asks for it.

A better header would be

myfunc <- function( x, y, ..., path_pet = temp.dir(), path_p = 
temp.dir() ) {

Then the user has to explicitly code "path_pet = getwd()" to wipe out 
their own files.

Duncan Murdoch

> 
> workingdir <- tempdir(TRUE)
> result <- myfunc( A, B, path_pet = workingdir, path_p = workingdir )
> 
> which means you can then clean up after yourself with
> 
> unlink( workingdir, recursive = TRUE )
> 
> I don't think this question is really about R packages anymore... if you
> still cannot read the help files to figure out your questions about how to
> do manage temporary files then you should probably make a small
> reproducible example(!!) and post a question on R-help.
> 
> (end of comments)
> 
>>   if (file_type == "raster"){
>>     # ---- identify raster format and loading----
>>     if (format == "GTiff"){
>>
>>       if( length(list.files(path_pet, pattern = ".tif")) == 0 | length(
>> list.files(path_p, pattern = ".tif")) == 0){
>>         stop("Not avaliable data of precipitation or evapotranspiration")
>>       }
>>       pet_files <- list.files(path_pet)
>>       pet <- raster::stack(paste(path_pet, pet_files, sep = ""))
>>       p_files <- list.files(path_p)
>> Kind regards,
>>
>> David Zamora
>>
>> El jue., 16 abr. 2020 a las 17:12, Uwe Ligges (<
>> ligges using statistik.tu-dortmund.de>) escribi?:
>>
>>>
>>>
>>> On 16.04.2020 20:09, Duncan Murdoch wrote:
>>>> On 16/04/2020 1:11 p.m., David Andres Zamora Avila wrote:
>>>>>    Hi,
>>>>>
>>>>> I submitted my package in CRAN and always appearance the next NOTE.
>>>>>
>>>>> Flavor: r-devel-linux-x86_64-debian-gcc
>>>>> Check: for detritus in the temp directory, Result: NOTE
>>>>>     Found the following files/directories:
>>>>>       'RtmpcDoRWjr.nc'
>>>>>
>>>>> I have tried to solve it in several ways (like if(interactive()), but
>>>>> I not
>>>>> sure how can I solve it.
>>>>
>>>> How was the file created?  What the check wants is that you delete it
>>>> when you are finished with it.  You can use the unlink() function to do
>>>> that.
>>>
>>> Or better create it in tempdir(): I guess you used paste(tempdir(), ...)
>>> instead of file.path() and got afilename one level above tempdir()?
>>>
>>> Best,
>>> Uwe Ligges
>>>
>>>
>>>>
>>>> Duncan Murdoch
>>>>
>>>> ______________________________________________
>>>> R-package-devel using r-project.org mailing list
>>>> https://stat.ethz.ch/mailman/listinfo/r-package-devel
>>>
>>
>>
>> -- 
>>
>> David Zamora <https://sites.google.com/a/unal.edu.co/dazamoraa/>
>> PhD Student, Universidad Nacional de Colombia, Bogot?
>> phone: +571 3165000 ext 13406
>> address: Av. NQS (Carrera 30) # 45-03, Hydraulics Lab (408-213)
>> email: dazamoraa using unal.edu.co
>>
>> 	[[alternative HTML version deleted]]
>>
>> ______________________________________________
>> R-package-devel using r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-package-devel
>>
> 
> ---------------------------------------------------------------------------
> Jeff Newmiller                        The     .....       .....  Go Live...
> DCN:<jdnewmil using dcn.davis.ca.us>        Basics: ##.#.       ##.#.  Live Go...
>                                         Live:   OO#.. Dead: OO#..  Playing
> Research Engineer (Solar/Batteries            O.O#.       #.O#.  with
> /Software/Embedded Controllers)               .OO#.       .OO#.  rocks...1k
> 
> ______________________________________________
> R-package-devel using r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-package-devel
>



More information about the R-package-devel mailing list