[R] install.packages() R vs RStudio
Duncan Murdoch
murdoch@dunc@n @end|ng |rom gm@||@com
Mon Aug 17 21:15:58 CEST 2020
Hi John.
I suspect most good front ends do similar things. For example, on
MacOS, R.app messes up "history()". I've never used ESS, but I imagine
one could find examples where it acts differently than base R: isn't
that the point?
One hopes all differences are improvements, but sometimes they're not.
If the modifications cause trouble (e.g. the ones you and I have never
experienced with install.packages() in RStudio, or the one I experience
every now and then with history() in R.app), then that may be a bug in
the front-end. It should be reported to the authors.
R is designed to be flexible, and to let people change its behaviour.
Using that flexibility is what all users should do. Improving the user
experience is what front-end writers should do. I don't find it
inadvisable at all. If it's the "silent" part that you object to, I
think that's a matter of taste. Personally, I've stopped reading the
messages like
"Attaching package: ‘zoo’
The following objects are masked from ‘package:base’:
as.Date, as.Date.numeric"
so they may as well be silent.
Duncan Murdoch
On 17/08/2020 10:02 a.m., John Fox wrote:
> Dear Duncan,
>
> On 2020-08-17 9:03 a.m., Duncan Murdoch wrote:
>> On 17/08/2020 7:54 a.m., Ivan Calandra wrote:
>>> Dear useRs,
>>>
>>> Following the recent activity on the list, I have been made aware of
>>> this discussion:
>>> https://stat.ethz.ch/pipermail/r-help/2020-May/466788.html
>>>
>>> I used to install all packages in R, but for simplicity (I use RStudio
>>> for all purposes), I now do it in RStudio. Now I am left wondering
>>> whether I should continue installing packages directly from RStudio or
>>> whether I should revert to using R.
>>>
>>> My goal is not to flare a debate over whether RStudio is better or worse
>>> than R, but rather simply to understand whether there are differences
>>> and potential issues (that could lead to problems in code) about
>>> installing packages through RStudio.
>>>
>>> In general, it would be nice to have a list of the differences in
>>> behavior between R and RStudio, but I believe this should come from the
>>> RStudio side of things.
>>>
>>> Thank you all for the insights.
>>> Ivan
>>>
>>
>> To see the install.packages function that RStudio installs, just type
>> its name:
>>
>> > install.packages
>> function (...)
>> .rs.callAs(name, hook, original, ...)
>> <environment: 0x7fe7dc5b65b0>
>>
>> You can debug it to see the other variables:
>>
>> > debug(install.packages)
>> > install.packages("abind")
>> debugging in: install.packages("abind")
>> debug: .rs.callAs(name, hook, original, ...)
>> Browse[2]> name
>> [1] "install.packages"
>> Browse[2]> hook
>> function (original, pkgs, lib, repos = getOption("repos"), ...)
>> {
>> if (missing(pkgs))
>> return(utils::install.packages())
>> if (!.Call("rs_canInstallPackages", PACKAGE = "(embedding)")) {
>> stop("Package installation is disabled in this version of
>> RStudio",
>> call. = FALSE)
>> }
>> packratMode <- !is.na(Sys.getenv("R_PACKRAT_MODE", unset = NA))
>> if (!is.null(repos) && !packratMode &&
>> .rs.loadedPackageUpdates(pkgs)) {
>> installCmd <- NULL
>> for (i in seq_along(sys.calls())) {
>> if (identical(deparse(sys.call(i)[[1]]),
>> "install.packages")) {
>> installCmd <- gsub("\\s+", " ",
>> paste(deparse(sys.call(i)),
>> collapse = " "))
>> break
>> }
>> }
>> .rs.enqueLoadedPackageUpdates(installCmd)
>> stop("Updating loaded packages")
>> }
>> .rs.addRToolsToPath()
>> on.exit({
>> .rs.updatePackageEvents()
>> .Call("rs_packageLibraryMutated", PACKAGE = "(embedding)")
>> .rs.restorePreviousPath()
>> })
>> original(pkgs, lib, repos, ...)
>> }
>> <environment: 0x7fe7db925588>
>>
>> The .rs.callAs function just substitutes the call to "hook" for the call
>> to the original install.packages. So you can see that they do the
>> following:
>> - they allow a way to disable installing packages,
>> - they support "packrat" (a system for installing particular versions
>> of packages, see https://github.com/rstudio/packrat),
>> - they add RTools to the path (presumably only on Windows)
>> - they call the original function, and at the end update internal
>> variables so they can show the library in the Packages pane.
>>
>> So there is no reason not to do it in R.
>>
>> By the way, saying that this is a "modified version of R" is like saying
>> every single user who defines a variable creates a modified version of
>> R. If you type "x" in the plain R console, you see "Error: object 'x'
>> not found". If you "modify" R by assigning a value to x, you'll see
>> something different. Very scary!
>
> I can't recall ever disagreeing with something you said on the R-help,
> but this seems to me to be off-base. While what you say is technically
> correct, silently masking a standard R function, in this case, I
> believe, by messing with the namespace of the utils package, seems
> inadvisable to me.
>
> As has been noted, cryptic problems have arisen with install.packages()
> in RStudio -- BTW, I use it regularly and haven't personally experienced
> any issues. One could concoct truly scary examples, such as redefining
> isTRUE().
>
> Best,
> John
>
>>
>> Duncan Murdoch
>>
>> ______________________________________________
>> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide
>> http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
More information about the R-help
mailing list