RStudio does not execute `system` commands from Rprofile.site - r

Using Rstudio (Version 1.0.143) under Ubuntu (16.04), if I add system("echo 'Hello world'") to my /usr/lib/R/etc/Rprofile.site file, I have no Hello world message displayed in R studio at startup.
If I start R from the terminal I have the Hello world message.
It seems that R studio ignores the system commands from Rprofile.site (idem from the .Rprofile file in the home directory)
Is it possible to enable system commands executions or is there a good reason to avoid this behavior ?

For short, RStudio doesn't source Rprofile.site file at all. (I use Ubuntu 17.04 and compile R-3.4.1 myself)
test Rprofile.site
To simply the question, you can use x=1 rather system("echo 'Hello world'") in the Rprofile.site file. Then you open RStudio:
> x
Error: object 'x' not found
That tells you whether RStudio ignores the system() commands in Rprofile.site or R studio ignores the entire Rprofile.site file.
test system()
If you find that your RStudio source theRprofile.site file instead. You can try system("echo haha > x") or system2('echo', 'haha', stdout = T) -> x.
That tells you whether RStudio ignores the system() commands or you can't see the message due to other reasons.
what RStudio says
Finally, see https://support.rstudio.com/hc/en-us/community/posts/200643758-Rprofile-site-
We don't actually implement the code for sourcing Rprofile.site (R does)
by Ian Pylvainen, Support Engineer at RStudio, Inc.

Related

system function usage from Rstudio in linux environment

I have the below line in my R script which is working when I invoke R from command line in Linux environment,
system('spectre run.scs -f psfascii +l mylog.txt >> /dev/null')
But the same line is not working when I run this script by launching RStudio from the command line,
spectre is a valid command which works when R is invoked, but when rstudio the command is not getting recognized.
Point to Note: The spectre command is from an external module apart from R, which I have loaded in the linux terminal like below before calling R and rstudio.
EDITED with PATH from R and RStudio
When I run which spectre from the command line and check its path,
> Sys.getenv("PATH")
[1] "/tool/eda/apps/synopsysHspice/2013.03-SP2/hspice/bin:/tool/eda/apps/synopsysHspice/2013.03-SP2/hspice/arch:/tool/eda/apps/mentorCalibre/2014.2_33.25/aoi_cal_2014.2_33.25/bin:/tool/eda/apps/cadenceMMSIM/13.11.292/tools/bin:/tool/eda/apps/cadenceMMSIM/13.11.292/bin:/tool/eda/apps/cadenceICOA/6.1.6.500.11/share/oa/bin:/tool/eda/apps/cadenceICOA/6.1.6.500.11/tools/dfII/bin:/tool/eda/apps/cadenceICOA/6.1.6.500.11/tools/bin:/tool/pandora64/bin:/tool/pandora64/sbin:/tool/pandora/bin:/tool/pandora/sbin:/usr/lib64/qt-3.3/bin:/bin:/usr/bin:/opt/puppetlabs/bin"
But when I check the path in R studio,
> Sys.getenv("PATH")
[1] "/tool/pandora64/.package/qt-5.5.1/bin:/tool/pandora64/.package/R-3.4.3/bin:/tool/pandora64/.package/rstudio-99.9.9/app/bin:/bin:/usr/bin:/tool/eda/apps/cadenceMMSIM/13.11.292:/tool/eda/apps/cadenceMMSIM/13.11.292"
Answer was suggested by #r2evans from the comment section,
Changed the PATH in Rstudio by copying the path from R environment in command line,
Sys.setenv(PATH="/tool/eda/apps/synopsysHspice/2013.03-SP2/hspice/bin:/tool/eda/apps/synopsysHspice/2013.03-SP2/hspice/arch:/tool/eda/apps/mentorCalibre/2014.2_33.25/aoi_cal_2014.2_33.25/bin:/tool/eda/apps/cadenceMMSIM/13.11.292/tools/bin:/tool/eda/apps/cadenceMMSIM/13.11.292/bin:/tool/eda/apps/cadenceICOA/6.1.6.500.11/share/oa/bin:/tool/eda/apps/cadenceICOA/6.1.6.500.11/tools/dfII/bin:/tool/eda/apps/cadenceICOA/6.1.6.500.11/tools/bin:/tool/pandora64/bin:/tool/pandora64/sbin:/tool/pandora/bin:/tool/pandora/sbin:/usr/lib64/qt-3.3/bin:/bin:/usr/bin:/opt/puppetlabs/bin")

Making system2 use a specific version of python

I have both python2 and python3 installed on my desktop. If I do
python -V in the terminal I get Python 3.6.0 :: Anaconda 4.3.0 (x86_64).
However if I use the system2 command from R
system2("python", args = "-V")
then it reports Python 2.7.10
If I specify the full path it I get the right version
system2("//anaconda/bin/python", args = "-V")
Python 3.6.0 :: Anaconda 4.3.0 (x86_64)
But I'd like system2 to just use python3 by default. Is there someway to change which version it uses? This is for Mac OSX
When running R from the R application or RStudio, system calls access a different environment than they do when you run R from terminal. Because of that, the PATH environment variable you have configured to run the correct version of a unix executable in a shell program is different than the one used in a system2()or system() call in an R session in either of these applications. To solve this, you need to set the path in your R environment.
In an interactive session, you can do this:
# Reproducing your problem (in the R application or RStudio)
system2("python", args="-V")
# Python 2.7.10
# set a new PATH in the environment accessed by R
# This is the line you can also add to your .Rprofile
Sys.setenv(PATH = paste(c("//anaconda/bin", Sys.getenv("PATH"),
collapse = .Platform$path.sep))
# For users other than the OP, you'll want to use the directory
# where your preferred installation of python is. For the OP that's
# //anaconda/bin
# Confirm
system2("python", args="-V")
# Python 3.6.0 :: Anaconda 4.3.0 (x86_64)
The system command python should now be found in the directory //anaconda/bin, rather than /usr/bin. This, of course, depends on where these unix executables are found in your system, so for readers other than the OP, you'll need to use the directory that holds your desired version of python.
This PATH will remain valid through the rest of your R session. To change your path in all R sessions, update (or create, if you haven't yet) your .Rprofile file. An .Rprofile file can be (or go) in your HOME directory or R_HOME. If you add the above line to .Rprofile, each time R is initialized, they will execute at the beginning of each R session.

.Renviron file not found in batch

I've got a ".Renviron" file but R can't seem to find it if I run an R file in batch mode. If I include
source(paste0(Sys.getenv("HOME"),"\\.Renviron"),echo=TRUE)
the output correctly reports
R_LIBS = "D:\\R\\library"
But the packages in this directory aren't found. I've tried R CMD BATCH and Rterm.exd < source > output 2>&1, the package library is not found using either method. Does anyone know what I'm doing wrong? I'm using R 3.3.2 under Windows 7.
I solved a similar issue in R 3.2.0 by creating a user environment variable R_ENVIRON_USER that pointed to my .Renviron file.
RStudio, it seems, loads .Renviron from %userprofile%/Documents but command line R defaults to just %userprofile%. Creating a system environment variable makes the behavior consistent for both RStudio and the command line.
See this webpage for a further discussion.

Rscript: command not found

I'm working with R for a while, and I always worked with Rstudio, I tried just now to run a Rscript command in terminal (I have a mac..) and I got this error-
>Rscript script.R
-bash: Rscript: command not found
when I tried to open R in the terminal I go the same error-
>R
-bash: R: command not found
I can run R code with the Rstudio and the R application, but I know there is a way to run R throw the terminal.
Did I miss something when I installed R on my computer? do I need to add R to my PATH?
thanks in advance!
Steps to run R script through Windows command prompt
Set the PATH variable for Rscript.exein the environment variables. Rscript.exe can be found inside bin folder of R. Set the path for Rscript.exe to use Rscript command in Windows command prompt. To check if Rscript.exe has been set environmentally or not, type Rscript in command prompt. The follwoing message should come.
Go to Command Prompt, set the path where your .R file is there.
Run the following command: Here abcd.R is present under Documents folder. So I set path and then run Rscript abcd.R
For those who stumbled upon this but use a mac, you might find this useful. I recently downloaded and installed R and RStudio through the CRAN site. I didn't do it through homebrew. Since I downloaded this install directly from the site, it DID NOT add the RScript executable to my /usr/local/bin directory.
I have locate on my mac so I did a quick lookup:
locate RScript
And I found it here:
/Library/Frameworks/R.framework/Versions/4.0/Resources/bin/Rscript
What I had to do was create a symbolic link to my /usr/local/bin directory to get it to work:
cd /usr/local/bin
ln -s /Library/Frameworks/R.framework/Versions/4.0/Resources/bin/Rscript Rscript
Now I'm able to run Rscript through the command line. This may help someone else out there.

Rscript: There is no package called ...?

I want to run R files in batch mode using Rscript, however it does not seem to be loading the libraries that I need. The specific error I am getting is:
Error in library(timeSeries) : there is no package called 'timeSeries'
Execution halted
However I do have the package timeSeries and can load it from Rstudio, RGui, and R from the command line no problem. The issue seems to only be when running a script using Rscript.
My system/environment variables are configured as:
C:\Program Files\R\R-3.1.0\bin\x64 (Appended to PATH)
R_HOME = C:\Program Files\R\R-3.1.0
R_User = Patrick
I am running the same version of R in RStudio, RGui, and R from command line. I've also checked .Library from these three sources and got the same output as well.
How can I run Rscript from command line with the packages that I am using (and have installed) in R?
EDIT:
I am using Rscript via Rscript script.r at the windows command line in the directory where script.r is located.
The output of Rscript -e print(.Library) is [1] "C:/PROGRA~1/R/R-31~1.0/library"
which is consistent with the other three options that I mentioned: [1] "C:/PROGRA~1/R/R-31~1.0/library"
However, if I put this in my script:
print(.libPaths())
library(timeSeries) #This is the package that failed to load
I get an output of:
[1] "C:/Program Files/R/R-3.1.0/library"
Error in library(timeSeries) : there is no package called 'timeSeries'
Execution halted
The corresponding call in RStudio gives an additional path to where the package is actually installed:
> print(.libPaths())
[1] "C:/Users/Patrick/Documents/R/win-library/3.1" "C:/Program Files/R/R-3.1.0/library"
In short, the value returned by calling Sys.getenv('R_LIBS_USER') in R.exe needs to be the same as the value returned by calling this at the command line:
Rscript.exe -e "Sys.getenv('R_LIBS_USER')"
and the above value needs to be included in this command line call:
Rscript.exe -e ".libPaths()"
Note that the values of R_LIBS_USER may be differ between R.exe and Rscript.exe if the value of R_USER is changed, either in the .Rprofile or the in target field of user's shortcut to R.exe, and in general, I find that the user library (i.e. .libPaths()[2]) is simply not set in Rscript.exe
Since I'm fond of setting R_USER to my USERPROFILE, I include the following block in at the top of .R files that I wish to run on mulitiple computers or in Rscript.exe's .Rprofile (i.e. Rscript -e "path.expand('~/.Rprofile')"):
# =====================================================================
# For compatibility with Rscript.exe:
# =====================================================================
if(length(.libPaths()) == 1){
# We're in Rscript.exe
possible_lib_paths <- file.path(Sys.getenv(c('USERPROFILE','R_USER')),
"R","win-library",
paste(R.version$major,
substr(R.version$minor,1,1),
sep='.'))
indx <- which(file.exists(possible_lib_paths))
if(length(indx)){
.libPaths(possible_lib_paths[indx[1]])
}
# CLEAN UP
rm(indx,possible_lib_paths)
}
# =====================================================================
As mentioned in the comments, it seems Rscript doesn't recognize the library path defaults automatically. I am writing an R script that needs to be source-able from the command line on different people's computers, so I came up with this more general workaround:
First store the default library path in a variable (Rscript-sourced functions can find this, they just don't automatiocally)
Then include that path in the library() call with lib.loc = argument.
This should work regardless of what the path is on a given computer.
library.path <- .libPaths()
library("timeseries", lib.loc = library.path)
Thanks again to #flodel above for putting me on the right path
This answer will not help the original asker (pbreach), but it may help someone else who stumbles across this question and has a similar problem to me.
I have many bash .sh script files which call RScript to execute .R files. My operating system is Windows 10, and I execute those bash files using cygwin.
Everything had been working fine until yesterday, when I finally upgraded my R from Revolution R 8.0.1 beta to Microsoft R Open 3.4.1. After that upgrade, every bash script that called RScript failed due to the exact same reason asked here (e.g. Error in library(zoo) : there is no package called 'zoo').
Investigation revealed that RScript actually worked fine if called from a DOS shell instead of from a cygwin bash shell.
For example, if I execute this in a DOS shell
C:\Progra~1\Microsoft\ROpen~1\R-3.4.1\bin\x64\Rscript.exe -e ".libPaths()"
I see the output
[1] "C:/Users/HaroldFinch/Documents/R/win-library/3.4"
[2] "C:/Program Files/Microsoft/R Open/R-3.4.1/library"
I eventually discovered the reason. As explained in the R FAQ, to define its home directory, R will first use the R_USER environment variable if defined, else it will use HOME environment variable if defined, else it will use the Windows "personal" directory.
My Windows configuration does not define either R_USER or HOME environment variables. So, in the DOS shell case, R uses my Windows "personal" directory (C:/Users/HaroldFinch/Documents). That is good, because that is where all my libraries are installed (C:/Users/HaroldFinch/Documents/R/win-library/3.4).
In contrast, cygwin defines and exports a HOME environment variable that points to my cygwin user directory, which lacks any R stuff. Hence, RScript called from cygwin had a wrong R home directory, and so failed to load libraries.
There are probably many ways to solve this. I decided to have my bash script set a R_USER environment variable which points to my Windows user directory.
For example, if I execute this in a cygwin bash shell:
R_USER="C:/Users/HaroldFinch/Documents"
export R_USER
/cygdrive/c/Progra~1/Microsoft/ROpen~1/R-3.4.1/bin/x64/Rscript.exe -e ".libPaths()"
I see the output
[1] "C:/Users/HaroldFinch/Documents/R/win-library/3.4"
[2] "C:/Program Files/Microsoft/R Open/R-3.4.1/library"
which is exactly the same output now as the DOS shell example above.
Another cause is packrat. If you are running with packrat, RStudio turns it on for you when you open the project. RScript does not, so you need a packrat::on() early in your script (before the library calls).
As the others have already pointed out, the problem is that Rscript.exe cannot recognise the win-library folder. The easiest solution for me was to explicitly set the path to the library folder by adding:
.libPaths("C:/Users/Benutzer1/Documents/R/win-library/4.0")
to my program. Then it loads all the packages from the win-library folder and it is still capable of loading packages from the standard library folder.

Resources