Проекты R и управление рабочей областью
Создавайте проекты RStudio и управляйте файлами .RData, .Rhistory и .Renviron.
«Проекты 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 RsaveRDS() — сохранение одного объекта
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 — локальная установка не требуется.
Все уроки этого курса
- Загрузка скриптов с помощью source()
- Комментарии, стиль и читаемость
- Рабочие каталоги и пути к файлам
- Проекты R и управление рабочей областью