[R-pkg-devel] Removing packages files

Duncan Murdoch murdoch@dunc@n @end|ng |rom gm@||@com
Thu Jan 2 22:47:21 CET 2025


Sorry, I misunderstood what you are after.  I thought you only wanted to 
keep it for the duration of a session.  I don't think there's a way to 
keep a file beyond the current session, but uninstall it later when the 
package is uninstalled.

I think the way you should handle this is to offer a function to the 
user to download the data to the user directory, not to ever do that 
automatically.  If the data hasn't been downloaded, then give the user a 
message that it needs to be downloaded for things to work.  (Or maybe 
download it to the temp directory, and delete it when your package is 
unloaded.)

Duncan Murdoch


On 2025-01-02 4:29 p.m., Lluís Revilla wrote:
> Dear Duncan,
> 
> Thank you for your answer. I checked again and made a mock package
> that removes a file with .onDetach.
> The file was not removed upon uninstalling the package.
> 
> Lluís
> 
> On Thu, 2 Jan 2025 at 17:23, Duncan Murdoch <murdoch.duncan using gmail.com> wrote:
>>
>> On 2025-01-02 9:55 a.m., Lluís Revilla wrote:
>>> Hi list,
>>>
>>> I am developing a package that will download some data, and I'd like
>>> to store it locally to not recalculate it often.
>>> The CRAN policy requires tools::R_user_dir to be used and "the
>>> contents are actively managed (including removing outdated material)"
>>> or using TMPDIR but "such usage should be cleaned up".
>>>
>>> When loading a package there is .onLoad or .onAttach to fill or check
>>> those files and other settings required for a package. Is there
>>> something for when a package is removed?
>>>
>>> I found some related functions like .Last or reg.fnalizer and setHook
>>> or packageEvent but they are about closing a session or don't have a
>>> specific event for when uninstalling packages via (remove.packages). I
>>> appreciate any feedback, thanks in advance.
>>>
>>
>> Yes, those are described in section "1.5.3 Load hooks" of writing R
>> extensions:
>>
>> "Packages can use a .onDetach or .Last.lib function (provided the latter
>> is exported from the namespace) when detach is called on the package. It
>> is called with a single argument, the full path to the installed
>> package. There is also a hook .onUnload which is called when the
>> namespace is unloaded (via a call to unloadNamespace, perhaps called by
>> detach(unload = TRUE)) with argument the full path to the installed
>> package’s directory. Functions .onUnload and .onDetach should be defined
>> in the namespace and not exported, but .Last.lib does need to be exported."
>>
>> Duncan Murdoch
>>



More information about the R-package-devel mailing list