HBat
HBat

Reputation: 5682

Script for creating a new project in Rstudio

I want to write a template that creates new projects in RStudio. What I want to do is:

  1. Create a new Rstudio project in a folder called "MyNewProject"
  2. Create a new project using ProjectTemplate package in this folder by: create.project('MyNewProject').
  3. Make some modifications in this folder.

I believe I can code steps 2 and 3. But I don't know how to create a new project in RStudio by a script. If it is possible, how can I do that?

Upvotes: 14

Views: 6049

Answers (4)

josep maria porrà
josep maria porrà

Reputation: 1388

With the new package usethis, the simpler answer to your question 1 reads:

library(usethis)
create_project(path = "MyNewProject", open = TRUE, rstudio = TRUE)

This code makes a folder "MyNewProject", creates "MyNewProject.Rproj" file and opens a new RStudio session with working directory "MyNewProject".

In the new session, now in "MyNewProject" folder, you can run the following code to initialize a local git repo

library(usethis)
use_git()

You can even create a remote repo in github, if you have all git configured properly, with

use_github()

Two useful references are:

  1. usethis

  2. Happy Git and Github for the UseR

Upvotes: 10

Tyler Rinker
Tyler Rinker

Reputation: 109864

Nothing special about a .Rproj file, just a text file with (or what ever defaults):

Version: 1.0

RestoreWorkspace: Default
SaveWorkspace: Default
AlwaysSaveHistory: Default

EnableCodeIndexing: Yes
UseSpacesForTab: Yes
NumSpacesForTab: 4
Encoding: UTF-8

RnwWeave: knitr
LaTeX: pdfLaTeX

So this function would do what you're after:

myProject <- function(proj, ...) {

    require(ProjectTemplate)
    create.project(proj, ...)

    x <- c("Version: 1.0", "", "RestoreWorkspace: Default", "SaveWorkspace: Default", 
        "AlwaysSaveHistory: Default", "", "EnableCodeIndexing: Yes", 
        "UseSpacesForTab: Yes", "NumSpacesForTab: 4", "Encoding: UTF-8", 
        "", "RnwWeave: knitr", "LaTeX: pdfLaTeX")

    cat(paste(x, collapse="\n"), file=file.path(proj, paste0(basename(proj), ".Rproj")))

    message(paste(basename(proj), "has been created"))
}

myProject("MyNewProject.Rproj")

For the git requirement, open the folder and use:

qdapTools::repo2github()

in the console (of course you'll need to install qdapTools).

Upvotes: 8

John Tarr
John Tarr

Reputation: 727

Was looking for this very thing, and noticed that RStudio has recently put out something for this.

Thought I'd put out an answer in case it helps anyone else.

https://rstudio.github.io/rstudio-extensions/rstudio_project_templates.html

Upvotes: 5

Luke W. Johnston
Luke W. Johnston

Reputation: 983

I know this is a bit of an older question, but for others out there, there is a way to code the .Rproj in a script.

If you look at the devtools::create function, there is a function called use_rstudio. Looking at the contents of that function you get:

> devtools::use_rstudio
function (pkg = ".") 
{
    pkg <- as.package(pkg)
    path <- file.path(pkg$path, paste0(pkg$package, ".Rproj"))
    if (file.exists(path)) {
        stop(pkg$package, ".Rproj already exists", call. = FALSE)
    }
    message("Adding RStudio project file to ", pkg$package)
    template_path <- system.file("templates/template.Rproj", 
        package = "devtools")
    file.copy(template_path, path)
    add_git_ignore(pkg, c(".Rproj.user", ".Rhistory", ".RData"))
    add_build_ignore(pkg, c("^.*\\.Rproj$", "^\\.Rproj\\.user$"), 
        escape = FALSE)
    invisible(TRUE)
}
<environment: namespace:devtools>

See the section for template_path? That is the code you can use to create the .Rproj file. So the end code in the script would be:

path <- file.path('path/to/folder', paste0('foldername', ".Rproj"))
template_path <- system.file("templates/template.Rproj", 
    package = "devtools")
file.copy(template_path, path)

You can now create an .Rproj from code! :)

Upvotes: 2

Related Questions