If you are using RStudio Projects and RStudio Workbench (previously RStudio Server Pro), you may want to share a project with multiple users on the same network in order to work collaboratively on the same project. However, the default R setup uses the same .Rhistory and .RData files for all users accessing the project which may lead to conflicts in some cases.
You can solve this by creating a project in a location accessible to all the users you wish to be able to edit it and adding in the following code in a .Rprofile file in that project’s working directory. This will cause each user's .Rhistory and .RData to be saved to separate files within a subdirectory of the project folder.
# define user data directory and history file location
local({
dataDir <- "userdata"
if (identical(.Platform$OS.type, "windows"))
username <- Sys.getenv("USERNAME")
else
username <- Sys.getenv("USER")
userDir <- file.path(dataDir, username)
if (!file.exists(userDir))
dir.create(userDir, recursive = TRUE)
userDir <- normalizePath(userDir)
# locate history in user data dir
Sys.setenv(R_HISTFILE = file.path(userDir, ".Rhistory"))
# make the rdataPath available in the global environment
# so it can be accessed by .First and .Last
rdataPath <- file.path(userDir, ".RData")
assign(".rdataPath", rdataPath, envir = globalenv())
})
# load the .RData at startup
.First <- function() {
if (file.exists(.rdataPath))
load(.rdataPath, envir = globalenv())
}
# save the .RData at exit
.Last <- function() {
save.image(.rdataPath)
}
You will also need to set the following options for your project in the Project Options menu:
If you want to share a project with multiple users without using .RData, you can do so using the following code in the project's .Rprofile:
# define user data directory and history file location
local({
dataDir <- "userdata"
if (identical(.Platform$OS.type, "windows"))
username <- Sys.getenv("USERNAME")
else
username <- Sys.getenv("USER")
userDir <- file.path(dataDir, username)
if (!file.exists(userDir))
dir.create(userDir, recursive = TRUE)
userDir <- normalizePath(userDir)
# locate history in user data dir
Sys.setenv(R_HISTFILE = file.path(userDir, ".Rhistory"))
})
Comments