Thank you Duncan for the very detailed and clear answer! Best, Ivan
-- Dr. Ivan Calandra TraCEr, laboratory for Traceology and Controlled Experiments MONREPOS Archaeological Research Centre and Museum for Human Behavioural Evolution Schloss Monrepos 56567 Neuwied, Germany +49 (0) 2631 9772-243 https://www.researchgate.net/profile/Ivan_Calandra On 17/08/2020 15:03, 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! > > Duncan Murdoch > > ______________________________________________ R-help@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.