[R-pkg-devel] Dealing with not so temporary files

Gábor Csárdi csardi.gabor at gmail.com
Thu Mar 15 11:14:33 CET 2018


This seems to be a good occasion to note that the CRAN policy does not
seem to conform
the industry standards. Applications can actually store user level
configuration information,
cached data, logs, etc. in the user's home directory, and there
standard way to do this.

Here is the Apple recommendation:
https://developer.apple.com/library/content/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/FileSystemOverview/FileSystemOverview.html#//apple_ref/doc/uid/TP40010672-CH2-SW1

AFAIK all modern Linux distributions use the XDG standard, or
something close to it:
https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html

On Windows there are APIs to retrieve the right locations, but
generally it is all in
`%APPDATA%`: https://msdn.microsoft.com/en-us/library/dd378457(v=vs.85).aspx

The rappdirs package helps you to select the right location, in a
platform independent way.
Of course according to the CRAN policy, you still need to ask the user
interactively
before writing to the directories that rappdirs returns.

I think a good practice is to use "R" as the application name, and
within that a subdirectory
that is the package name. This is a way to do it, for configuration files:

## Windows
❯ rappdirs::user_config_dir("R", version = "mypackage")
[1] "C:/Users/gaborcsardi/AppData/R/R/mypackage"

## macOS
❯ rappdirs::user_config_dir("R", version = "mypackage")
[1] "/Users/gaborcsardi/Library/Application Support/R/mypackage"

## Linux
❯ rappdirs::user_config_dir("R", version = "mypackage", os = "unix")
[1] "/Users/gaborcsardi/.config/R/mypackage"

Gabor

On Tue, Mar 13, 2018 at 8:52 AM, Joris Meys <Joris.Meys at ugent.be> wrote:
> Duncan gave one option. The other option is to provide a specific
> write2disk() function or so that allows the user to determine whether
> he/she wants to save the data. Then the user can decide exactly where he
> wants to find it.
>
> The other important part is the format in which it's saved. Users can
> simply use save() or write.csv() (or any of the readr functions if you
> must) to store whatever data they want in the format they want. There's a
> lot of database connections possible as well if that's needed. The only
> reason I see to provide a specific write function or argument, is when the
> storage is done in a nonstandard format. And then it makes sense to provide
> both read_myformat() and write_myformat() in some form. That's what I as an
> R user would expect.
>
> Fwiw: I have seen the commotion on that discussion recently as well, but
> this is really nothing new. For as long as I remember, writing to disk only
> happens when you use a function that does explicitly that. Which makes
> sense as well, as eg my students often run R in a shared environment during
> classes, and sysadmins don't like software that starts writing files
> everywhere.
>
> Cheers
> Joris
>
>
>
> On Tue, Mar 13, 2018 at 12:32 AM, Duncan Murdoch <murdoch.duncan at gmail.com>
> wrote:
>
>> On 12/03/2018 6:26 PM, Roy Mendelssohn - NOAA Federal wrote:
>>
>>> Hi All:
>>>
>>> Recently there was a proper admonishment to a developer that it is bad
>>> etiquette writing to a user's home directory,  and for temporary files use
>>> the functions tempdir() and tempfile().  I am working on a new package
>>> (presently on Github) that downloads data from a remote server,  reads the
>>> data into R,  but I would like to save that file for the user to access
>>> later if they so desire.  Saving to the "temp directory" is not a good
>>> option for that,  want to put it somewhere where the user can easily find
>>> it.  What is the proper etiquette for this?  Even if I provide an argument
>>> for the user to specify the location to save the file,  I should provide a
>>> default location.
>>>
>>
>> Why not provide an argument whose default is something given by tempfile()?
>>
>> Duncan Murdoch
>>
>>
>>
>>> Any suggestions appreciated.
>>>
>>> -Roy
>>>
>>>
>>>
>>>
>>>
>>> **********************
>>> "The contents of this message do not reflect any position of the U.S.
>>> Government or NOAA."
>>> **********************
>>> Roy Mendelssohn
>>> Supervisory Operations Research Analyst
>>> NOAA/NMFS
>>> Environmental Research Division
>>> Southwest Fisheries Science Center
>>> ***Note new street address***
>>> 110 McAllister Way
>>> Santa Cruz, CA 95060
>>> Phone: (831)-420-3666
>>> Fax: (831) 420-3980
>>> e-mail: Roy.Mendelssohn at noaa.gov www: http://www.pfeg.noaa.gov/
>>>
>>> "Old age and treachery will overcome youth and skill."
>>> "From those who have been given much, much will be expected"
>>> "the arc of the moral universe is long, but it bends toward justice" -MLK
>>> Jr.
>>>
>>> ______________________________________________
>>> R-package-devel at r-project.org mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-package-devel
>>>
>>>
>> ______________________________________________
>> R-package-devel at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-package-devel
>>
>
>
>
> --
> Joris Meys
> Statistical consultant
>
> Department of Data Analysis and Mathematical Modelling
> Ghent University
> Coupure Links 653, B-9000 Gent (Belgium)
> <https://maps.google.com/?q=Coupure+links+653,%C2%A0B-9000+Gent,%C2%A0Belgium&entry=gmail&source=g>
>
> tel: +32 (0)9 264 61 79
> -----------
> Biowiskundedagen 2017-2018
> http://www.biowiskundedagen.ugent.be/
>
> -------------------------------
> Disclaimer : http://helpdesk.ugent.be/e-maildisclaimer.php
>
>         [[alternative HTML version deleted]]
>
> ______________________________________________
> R-package-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-package-devel



More information about the R-package-devel mailing list