Movatterモバイル変換


[0]ホーム

URL:


Introduction to org

Why org?

Managing research projects and data analyses can be challenging whendealing with:

Theorg package solves these problems by providing astandardized framework for organizing R projects with clear separationof concerns and consistent structure across all your analyses.

Installation

# Install from CRANinstall.packages("org")# Or install development version from GitHub# devtools::install_github("csids/org")

Quick start

Here’s how to get started with your firstorgproject:

library(org)# 1. Initialize your project structureorg::initialize_project(env = .GlobalEnv,home ="my_analysis",results ="my_results")# 2. Access project pathsorg::project$home# Your code locationorg::project$results_today# Today's results folder# 3. Use org functions in your analysisorg::path("data","file.csv")# Cross-platform pathsorg::ls_files("R")# List R files

Concept

The concept behindorg is straightforward - mostanalyses have three main sections:

Each section has unique requirements:

Code requirements

Results requirements

Data requirements

Project structure

Core components

1.org::initialize_project

This is the main function that sets up your project structure. Ittakes 2+ arguments and saves folder locations inorg::project for use throughout your analysis:

  • home: Location ofRun.R and theR/ folder (accessible viaorg::project$home)
  • results: Results folder that creates date-basedsubfolders (accessible viaorg::project$results_today)
  • ...: Additional folders as needed (e.g.,data_raw,data_clean)

2.Run.R

This is your main analysis script that orchestrates the entireworkflow:

  • Data cleaning
  • Analysis
  • Result generation

All code sections should be encapsulated in functions in theR/ folder. You should not have multiple main files, as thiscreates confusion when returning to your code later. However, you canhave versioned files (e.g.,Run_v01.R,Run_v02.R) where later versions supersede earlier ones.

3.R/ directory

All analysis functions should be defined inorg::project$home/R. Theinitialize_projectfunction automatically sources all R scripts in this directory.

Example project structure

Here’s a complete example of how to structure your project:

# Initialize the projectorg::initialize_project(env = .GlobalEnv,home ="/git/analyses/2019/analysis3/",results ="/dropbox/analyses_results/2019/analysis3/",data_raw ="/data/analyses/2019/analysis3/")# Document changes in archived resultstxt<- glue::glue("  2019-01-01:    Included:    - Table 1    - Table 2  2019-02-02:    Changed Table 1 from mean -> median",.trim=FALSE)org::write_text(txt = txt,file = fs::path(org::project$results,"info.txt"))# Load required packageslibrary(data.table)library(ggplot2)# Run analysisd<-clean_data()# Accesses data from org::project$data_rawtable_1(d)# Saves to org::project$results_todayfigure_1(d)# Saves to org::project$results_todayfigure_2(d)# Saves to org::project$results_today

Research article versioning

When writing research articles, you often need multiple versions(initial submission, resubmissions).org helps manage thisby using date-based versioning:

  1. Initial submission:
    • RenameRun.R toRun_YYYY_MM_DD_submission_1.R
    • RenameR/ toR_YYYY_MM_DD_submission_1/
  2. Resubmission:
    • Create new files with updated dates
    • Keep old versions for reference

This preserves the code that produced results for each submission,ensuring all changes are deliberate and intentional.

Team collaboration

When working with team members who have different folder structures,you can specify multiple possible paths. Theorg packagewill automatically select the first path that exists:

# Team member setup - org will use the first existing pathorg::initialize_project(env = .GlobalEnv,home =c("/Users/teammate1/projects/analysis3/",# Mac user"/home/teammate2/analysis3/",# Linux user"C:/Users/teammate3/analysis3/"# Windows user  ),results =c("/Users/teammate1/Dropbox/results/","/home/teammate2/dropbox/results/","C:/Users/teammate3/Dropbox/results/"  ),data_raw =c("/Users/teammate1/data/analysis3/","/home/teammate2/data/analysis3/","C:/shared_drive/data/analysis3/"  ))

This approach allows the same initialization code to work acrossdifferent team members’ machines without modification.

Best practices

Recommended structure

Store your project components in appropriate locations:

# Code (GitHub)git/└── analyses/    ├── 2018/    │   ├── analysis_1/          # org::project$home    │   │   ├── Run.R    │   │   └── R/    │   │       ├── clean_data.R    │   │       ├── descriptives.R    │   │       ├── analysis.R    │   │       └── figure_1.R    │   └── analysis_2/    └── 2019/        └── analysis_3/# Results (Dropbox)dropbox/└── analyses_results/    ├── 2018/    │   ├── analysis_1/          # org::project$results    │   │   ├── 2018-03-12/     # org::project$results_today    │   │   │   ├── table_1.xlsx    │   │   │   └── figure_1.png    │   │   ├── 2018-03-15/    │   │   └── 2018-03-18/    │   └── analysis_2/    └── 2019/        └── analysis_3/# Data (Local)data/└── analyses/    ├── 2018/    │   ├── analysis_1/          # org::project$data_raw    │   │   └── data.xlsx    │   └── analysis_2/    └── 2019/        └── analysis_3/

Alternative structures

RMarkdown project

For projects on a shared network drive without GitHub/Dropbox:

project_name/              # org::project$home├── Run.R├── R/│   ├── CleanData.R│   ├── Descriptives.R│   ├── Analysis1.R│   └── Graphs1.R├── paper/│   └── paper.Rmd├── results/              # org::project$results│   └── 2018-03-12/      # org::project$results_today│       ├── table1.xlsx│       └── figure1.png└── data_raw/            # org::project$data_raw    └── data.xlsx

Single folder project

For projects with limited access:

project_name/              # org::project$home├── Run.R├── R/│   ├── clean_data.R│   ├── descriptives.R│   ├── analysis.R│   └── figure_1.R├── results/              # org::project$results│   └── 2018-03-12/      # org::project$results_today│       ├── table_1.xlsx│       └── figure_1.png└── data_raw/            # org::project$data_raw    └── data.xlsx

Path naming conventions

Understanding path components is important:

ComponentName
/home/richard/test.srcAbsolute (file)path
richard/test.srcRelative (file)path
/home/richard/Absolute (directory) path
./richard/Relative (directory) path
richardDirectory
test.srcFilename

A path specifies a location in a directory structure, while afilename only includes the file name itself. Directories only includedirectory name information.

Function reference

Theorg package provides several key functions forproject management:

Core functions

File operations

Utility functions

Common workflows

Setting up a new analysis

# 1. Initialize project structureorg::initialize_project(env = .GlobalEnv,home ="/path/to/your/analysis/",results ="/path/to/results/",data_raw ="/path/to/data/")# 2. Create analysis functions in R/ folder# 3. Run analysis from Run.R# 4. Results automatically saved to org::project$results_today

Working with existing projects

# Reinitialize existing projectorg::initialize_project(env = .GlobalEnv,home ="/existing/analysis/path/",results ="/existing/results/path/")# Update results location if neededorg::set_results("/new/results/path/")

Environment management

Recommendation: Always use.GlobalEnv -it makes life so much easier! All your functions will be directlyaccessible without having to worry about environment scoping issues.

# Recommended approach - use .GlobalEnvorg::initialize_project(env = .GlobalEnv, ...)# Only use custom environments in special cases (e.g., package development)my_env<-new.env()org::initialize_project(env = my_env, ...)

Path construction and cross-platform compatibility

Theorg::path() function ensures your code works acrossdifferent operating systems:

# Cross-platform path constructiondata_file<- org::path(org::project$data_raw,"survey_data.csv")output_file<- org::path(org::project$results_today,"analysis_results.xlsx")# Handles multiple path componentsnested_path<- org::path("folder1","subfolder","file.txt")# Removes double slashes automaticallyclean_path<- org::path("folder//","//file.txt")# Returns "folder/file.txt"

Troubleshooting

Common issues

Path issues

  • Always useorg::path() for cross-platformcompatibility
  • Avoid hardcoded absolute paths in shared code
  • Check that all specified directories exist and are accessible
  • Ensure you have write permissions to results directories

Sourcing problems

# If functions aren't loading from R/ folder:# 1. Check that R files are in the correct directoryorg::ls_files(org::path(org::project$home,"R"))# 2. Verify file extensions are .R or .r# 3. Check for syntax errors in R files# 4. Restart R and reinitialize project if needed

Getting help


[8]ページ先頭

©2009-2025 Movatter.jp