R Academy · Урок

Проекты R и управление рабочей областью

Создавайте проекты RStudio и управляйте файлами .RData, .Rhistory и .Renviron.

Урок 4 из 413 шагов

«Проекты R и управление рабочей областью» — бесплатный урок R Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения R Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс R Academy содержит 4 уроков всего.

Рабочая область R: .RData и .Rhistory

По умолчанию при выходе из R программа предлагает сохранить рабочую область — все объекты в памяти — в скрытый файл .RData в рабочем каталоге. История команд сохраняется в .Rhistory. В следующем сеансе эти файлы загружаются автоматически.

Это удобство также может нарушить воспроизводимость.

# .RData: binary snapshot of all objects in the global environment
# .Rhistory: text file of every command you typed

# See what would be saved right now:
cat('Objects that would be saved:', length(ls()), '\n')
cat('Their names:', paste(ls(), collapse = ', '))

# Workspace saving is controlled by:
# Tools -> Global Options -> General -> Save workspace (NEVER recommended)
# Or at startup: R --no-save --no-restore

Почему следует избегать автоматического сохранения .RData?

Если полагаться на .RData, результаты нельзя воспроизвести с нуля. Объекты незаметно накапливаются между сеансами, старые переменные перекрывают новые, а коллеги не могут воссоздать ваше окружение. Решение: никогда не сохраняйте рабочую область — всегда создавайте её заново, запуская свои скрипты.

# The recommended R startup setting (in RStudio):
# Tools -> Global Options -> General
#   Restore .RData at startup: UNCHECKED
#   Save workspace on exit: NEVER

# This forces you to write scripts that are fully self-contained.
# A fresh session that runs cleanly = reproducible analysis.

# Equivalent command-line flags:
# R --no-save --no-restore

cat('Always start fresh!')

rm() — очистка рабочей области

rm(list = ls()) — стандартный способ удалить все объекты из глобального окружения, имитируя новый сеанс без перезапуска R. Эту команду часто размещают в начале скрипта, чтобы при каждом запуске начинать с чистого состояния.

# Create some objects
a <- 1
b <- 'hello'
df <- data.frame(x = 1:3)

cat('Before rm:', length(ls()), 'objects\n')

# Remove specific objects
rm(a, b)
cat('After rm(a,b):', length(ls()), 'objects\n')

# Remove ALL objects in global environment
rm(list = ls())
cat('After rm(list=ls()):', length(ls()), 'objects')

options() — глобальные настройки сеанса

options() управляет многими параметрами поведения R, действующими на протяжении всего сеанса. Два наиболее часто задаваемых параметра — scipen (штраф за научную запись) и digits (количество выводимых значащих цифр). Устанавливайте их в начале скриптов, чтобы вывод был единообразным.

# Default behavior:
cat(0.000123456, '\n')    # may show 1.23456e-04

# Suppress scientific notation (positive scipen = prefer fixed)
options(scipen = 999)
cat(0.000123456, '\n')    # now shows 0.000123456

# Control printed digits
options(digits = 4)
cat(pi, '\n')              # 3.142

# Check current options:
cat('scipen:', getOption('scipen'), '\n')
cat('digits:', getOption('digits'))

.Renviron — переменные окружения

Файл .Renviron хранит переменные окружения, которые R загружает при запуске. Это подходящее место для секретов и значений конфигурации, таких как ключи API, пароли к базам данных и пути в файловой системе: так они не попадут в исходный код.

# .Renviron file (in ~ or project root):
# DATABASE_URL=postgres://user:pass@host/db
# OPENAI_API_KEY=sk-abc123
# DATA_ROOT=/data/shared

# Read in R:
db_url <- Sys.getenv('DATABASE_URL')
api_key <- Sys.getenv('OPENAI_API_KEY', unset = 'KEY_NOT_SET')

cat('DB URL set:', nchar(db_url) > 0, '\n')
cat('API key:', api_key)

# To edit .Renviron:
# usethis::edit_r_environ()   <- if usethis is installed
# file.edit('~/.Renviron')    <- base R

saveRDS() — сохранение одного объекта

saveRDS() сериализует один объект R в файл .rds. Это предпочтительный способ кэшировать результаты ресурсоёмких вычислений: файл хранит ровно один объект, а вы полностью контролируете, что сохраняете и загружаете.

# Create an object to save
result_list <- list(
  model   = 'linear_regression',
  r2      = 0.87,
  rmse    = 12.4,
  created = Sys.time()
)

# Save to disk
tmp_rds <- tempfile(fileext = '.rds')
saveRDS(result_list, file = tmp_rds)
cat('Saved to:', tmp_rds, '\n')

# Load it back (even in a fresh session)
loaded <- readRDS(tmp_rds)
cat('R-squared:', loaded$r2)

readRDS() — восстановление одного объекта

readRDS() десериализует файл .rds обратно в объект R. В отличие от load(), возвращаемое значение необходимо присвоить имени, поэтому один и тот же файл можно загрузить под разными именами в разных частях кода.

# Suppose model_results.rds was saved earlier
tmp <- tempfile(fileext = '.rds')
saveRDS(list(coef = c(1.2, 3.4), n = 100), tmp)

# Load with a meaningful name:
model_output <- readRDS(tmp)
cat('Coefficients:', model_output$coef, '\n')
cat('Sample size:', model_output$n, '\n')

# Key advantage over load():
# With load(), the name is baked into the file.
# With readRDS(), YOU choose the name on load.
cat('readRDS gives you naming control')

save() и load() — несколько объектов

save() сериализует один или несколько именованных объектов в файл .RData. load() восстанавливает их, но исходные имена восстанавливаются автоматически, что может незаметно перезаписать существующие объекты. Используйте эти функции с осторожностью.

# Save multiple objects at once
scores <- c(85, 92, 78)
labels <- c('Alice', 'Bob', 'Carol')

tmp_rdata <- tempfile(fileext = '.RData')
save(scores, labels, file = tmp_rdata)
cat('Saved to:', tmp_rdata, '\n')

# Remove originals to simulate a new session
rm(scores, labels)
cat('Removed. Objects now:', length(ls()), '\n')

# Load restores original names automatically
load(tmp_rdata)
cat('Restored scores:', scores)

saveRDS и save — когда что использовать

Используйте saveRDS() для отдельных объектов, когда хотите полностью контролировать их имена при загрузке — это удобно для результатов моделей, обработанных наборов данных и кэшированных результатов. Используйте save() только тогда, когда нужно объединить несколько именованных объектов для конкретного рабочего процесса с коллегой.

# saveRDS: one object, you name it on load
# saveRDS(my_model, 'outputs/model_v2.rds')
# m <- readRDS('outputs/model_v2.rds')  <- your name choice

# save: multiple objects, names fixed in the file
# save(model, validation_df, file = 'outputs/session.RData')
# load('outputs/session.RData')  <- restores 'model' and 'validation_df'

# Practical rule:
# saveRDS for caching single results
# save for snapshots shared between collaborators

cat('saveRDS is usually the better choice')

Проверка и восстановление options()

Параметры, заданные во время сеанса, сохраняются только в этом сеансе. Чтобы скрипт был самодостаточным, установите нужные параметры в начале и при необходимости восстановите прежние значения после завершения скрипта с помощью on.exit().

# Capture current options before changing
old_options <- options(scipen = 999, digits = 3)

# Use on.exit to restore them no matter what
on.exit(options(old_options), add = TRUE)

# Now do your work
cat(pi, '\n')           # 3.14
cat(1234567.89, '\n')   # 1234568 (no sci notation)

# When function or script exits, options are restored automatically
cat('Options will restore on exit')

Проекты RStudio для управления рабочей областью

Проект RStudio (файл .Rproj) автоматически устанавливает рабочий каталог в корень проекта, хранит отдельный .Rhistory для каждого проекта и изолирует настройки сеанса. Это стандартный способ управлять самодостаточными проектами R.

# When you open a .Rproj file, RStudio automatically:
# 1. Sets working directory to the project root
# 2. Loads the project-specific .Rhistory
# 3. Optionally restores project .RData

# Best practice for new projects:
# File -> New Project -> New Directory -> New Project

# Your project structure then looks like:
# my_project/
#   my_project.Rproj
#   .Rprofile        (project-level options)
#   .Renviron        (project-level env vars)
#   R/               (scripts)
#   data/            (raw data)
#   output/          (results)

cat('RStudio Projects = clean workspaces')

Быстрая проверка

Вы хотите сохранить фрейм данных R с именем clean_data на диске, чтобы загрузить его в другом скрипте под любым выбранным именем переменной. Какую функцию следует использовать?

Управление рабочей областью — основные выводы

Хорошо управляемая рабочая область R — основа воспроизводимого анализа:

  • .RData / .Rhistory — автоматически сохраняемые файлы рабочей области (отключите автоматическое сохранение!)
  • rm(list = ls()) — удалить все объекты и начать с чистого состояния
  • options(scipen = 999, digits = 4) — управлять форматом чисел
  • .Renviron — хранить ключи API и пути как переменные окружения
  • saveRDS(obj, 'file.rds') — кэшировать один объект
  • readRDS('file.rds') — восстановить объект под собственным именем
  • save(a, b, file = 'session.RData') — объединить несколько объектов
  • load('session.RData') — восстановить все объединённые объекты
  • Используйте проекты RStudio для автоматического управления рабочим каталогом
# Typical script header for clean, reproducible analysis:
rm(list = ls())                         # clean workspace
options(scipen = 999, digits = 4)       # formatting

# Load secrets from .Renviron:
db_url <- Sys.getenv('DATABASE_URL')

# Load cached data if available:
cache_file <- file.path('cache', 'processed_data.rds')
if (file.exists(cache_file)) {
  df <- readRDS(cache_file)
  cat('Loaded from cache\n')
} else {
  cat('Cache not found, run data_prep.R first\n')
}

cat('Workspace ready')
Можно начать бесплатно

Изучай R с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
43
Уроки
159

Часто задаваемые вопросы

Урок «Проекты R и управление рабочей областью» бесплатный?

Да — полный текст урока «Проекты R и управление рабочей областью» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс R Academy, подпишись на CoddyKit PRO. Курс R Academy содержит 4 уроков всего.

Чему я научусь в уроке «Проекты R и управление рабочей областью»?

Создавайте проекты RStudio и управляйте файлами .RData, .Rhistory и .Renviron. Ты практикуешь R Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать R Academy?

Предыдущий опыт не требуется. R Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Проекты R и управление рабочей областью»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке R Academy?

Да. Каждый урок R Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Загрузка скриптов с помощью source()
  2. Комментарии, стиль и читаемость
  3. Рабочие каталоги и пути к файлам
  4. Проекты R и управление рабочей областью
← Назад к R Academy