Projekty R i zarządzanie obszarem roboczym
Twórz projekty RStudio i zarządzaj plikami .RData, .Rhistory oraz .Renviron.
Projekty R i zarządzanie obszarem roboczym to bezpłatna lekcja R Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej R Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs R Academy zawiera 4 lekcji w sumie.
Obszar roboczy R: .RData i .Rhistory
Domyślnie po zakończeniu pracy z R pojawia się pytanie o zapisanie obszaru roboczego — wszystkich obiektów znajdujących się w pamięci — do ukrytego pliku .RData w katalogu roboczym. Historia poleceń trafia do pliku .Rhistory. Pliki te są automatycznie wczytywane podczas następnej sesji.
Ta wygoda może jednak utrudniać odtwarzalność wyników.
# .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-restoreDlaczego unikać automatycznego zapisywania .RData?
Poleganie na pliku .RData oznacza, że wyników nie można odtworzyć od zera. Obiekty niewidocznie gromadzą się między sesjami, stare zmienne przesłaniają nowe, a współpracownicy nie mogą odtworzyć Twojego środowiska. Rozwiązanie: nigdy nie zapisuj obszaru roboczego — zawsze odtwarzaj go, uruchamiając skrypty.
# 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() — czyszczenie obszaru roboczego
rm(list = ls()) to standardowy sposób usuwania wszystkich obiektów ze środowiska globalnego, symulujący nową sesję bez ponownego uruchamiania R. Często umieszcza się go na początku skryptu, aby zapewnić czysty stan przy każdym uruchomieniu.
# 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() — globalne ustawienia sesji
options() steruje wieloma zachowaniami obowiązującymi w całej sesji R. Dwie najczęściej ustawiane opcje to scipen (kara za notację naukową) i digits (liczba wyświetlanych cyfr znaczących). Ustawiaj je na początku skryptów, aby zapewnić spójny format wyników.
# 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 — zmienne środowiskowe
Plik .Renviron przechowuje zmienne środowiskowe wczytywane przez R podczas uruchamiania. To właściwe miejsce na sekrety i wartości konfiguracyjne, takie jak klucze API, hasła do baz danych i ścieżki systemu plików — dzięki temu nie trafiają one do kodu źródłowego.
# .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() — zapisywanie pojedynczego obiektu
saveRDS() serializuje pojedynczy obiekt R do pliku .rds. Jest preferowanym sposobem buforowania wyników kosztownych obliczeń, ponieważ plik przechowuje dokładnie jeden obiekt, a użytkownik ma pełną kontrolę nad tym, co zapisuje i wczytuje.
# 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() — przywracanie pojedynczego obiektu
readRDS() deserializuje plik .rds z powrotem do obiektu R. W przeciwieństwie do load() wartość zwracaną trzeba przypisać do nazwy — dzięki temu ten sam plik można wczytać pod różnymi nazwami w różnych częściach kodu.
# 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() i load() — wiele obiektów
save() serializuje jeden lub więcej nazwanych obiektów do pliku .RData. load() je przywraca — automatycznie odtwarzając jednak oryginalne nazwy, co może po cichu nadpisać istniejące obiekty. Używaj tych funkcji ostrożnie.
# 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 a save — kiedy używać której funkcji
Używaj saveRDS() dla pojedynczych obiektów, gdy chcesz mieć pełną kontrolę nad ich nazwą podczas wczytywania — to idealne rozwiązanie dla wyników modeli, przetworzonych zbiorów danych i buforowanych wyników. Używaj save() tylko wtedy, gdy musisz połączyć wiele nazwanych obiektów na potrzeby konkretnego sposobu pracy ze współpracownikiem.
# 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')Sprawdzanie i przywracanie opcji options()
Opcje ustawione podczas sesji obowiązują tylko w jej trakcie. Aby skrypt był samowystarczalny, ustaw potrzebne opcje na początku i (opcjonalnie) przywróć poprzednie wartości po zakończeniu skryptu, używając 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')Projekty RStudio do zarządzania obszarem roboczym
Projekt RStudio (plik .Rproj) automatycznie ustawia katalog roboczy na katalog główny projektu, przechowuje osobny plik .Rhistory dla każdego projektu i izoluje opcje sesji. To standardowy sposób zarządzania samodzielnymi projektami 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')Szybki test
Chcesz zapisać pojedynczą ramkę danych R o nazwie clean_data na dysku, aby móc wczytać ją w innym skrypcie pod dowolną wybraną nazwą zmiennej. Jakiej funkcji należy użyć?
Zarządzanie obszarem roboczym — najważniejsze informacje
Dobrze zarządzany obszar roboczy R jest podstawą odtwarzalnej analizy:
.RData/.Rhistory— automatycznie zapisywane pliki obszaru roboczego (wyłącz automatyczny zapis!)rm(list = ls())— usuwanie wszystkich obiektów w celu rozpoczęcia z czystym stanemoptions(scipen = 999, digits = 4)— sterowanie formatowaniem liczb.Renviron— przechowywanie kluczy API i ścieżek jako zmiennych środowiskowychsaveRDS(obj, 'file.rds')— buforowanie pojedynczego obiektureadRDS('file.rds')— przywracanie obiektu pod własną nazwąsave(a, b, file = 'session.RData')— łączenie wielu obiektówload('session.RData')— przywracanie wszystkich połączonych obiektów- Używaj projektów RStudio do automatycznego zarządzania katalogiem roboczym
# 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')Często zadawane pytania
Czy lekcja „Projekty R i zarządzanie obszarem roboczym” jest bezpłatna?
Tak — pełny tekst „Projekty R i zarządzanie obszarem roboczym” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu R Academy, przejdź na CoddyKit PRO. Kurs R Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Projekty R i zarządzanie obszarem roboczym”?
Twórz projekty RStudio i zarządzaj plikami .RData, .Rhistory oraz .Renviron. Ćwiczysz R Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć R Academy?
Nie wymagamy żadnego doświadczenia. R Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Projekty R i zarządzanie obszarem roboczym”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji R Academy?
Tak. Każda lekcja R Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Używanie source() do ładowania skryptów
- Komentarze, styl i czytelność
- Katalogi robocze i ścieżki plików
- Projekty R i zarządzanie obszarem roboczym