R-projekt och hantering av arbetsytan
Skapa RStudio-projekt och hantera .RData, .Rhistory och .Renviron.
R-projekt och hantering av arbetsytan är en gratis lektion i R Academy på CoddyKit. Detta är lektion 4 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för R Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i R Academy innehåller totalt 4 lektioner.
R-arbetsytan: .RData och .Rhistory
Som standard frågar R, när du avslutar programmet, om du vill spara arbetsytan – alla objekt i minnet – i en dold fil med namnet .RData i arbetskatalogen. Din kommandohistorik sparas i .Rhistory. Dessa filer läses in automatiskt vid nästa session.
Denna bekvämlighet kan också bli en fälla för reproducerbarheten.
# .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-restoreVarför bör du undvika automatisk sparning av .RData?
Om du förlitar dig på .RData kan dina resultat inte återskapas från grunden. Objekt samlas osynligt på hög mellan sessioner, gamla variabler kan skugga nya och dina medarbetare kan inte återskapa din miljö. Lösningen är att aldrig spara arbetsytan – återskapa den alltid genom att köra dina skript.
# 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() – rensa arbetsytan
rm(list = ls()) är det vedertagna sättet att ta bort alla objekt från den globala miljön. Det simulerar en ny session utan att R behöver startas om. Det placeras ofta högst upp i ett skript för att säkerställa en ren utgångspunkt vid varje körning.
# 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() – globala sessionsinställningar
options() styr många beteenden som gäller för hela R-sessionen. Två av de vanligaste inställningarna är scipen (straff för vetenskaplig notation) och digits (antal signifikanta siffror som skrivs ut). Ange dem högst upp i skript för konsekventa resultat.
# 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 – miljövariabler
Filen .Renviron lagrar miljövariabler som R läser in vid uppstart. Den är rätt plats för hemligheter och konfigurationsvärden, till exempel API-nycklar, databaslösenord och filsökvägar, så att de hålls utanför källkoden.
# .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() – spara ett enskilt objekt
saveRDS() serialiserar ett enskilt R-objekt till en .rds-fil. Det är det rekommenderade sättet att cachelagra resultat från beräkningar som tar lång tid, eftersom filen innehåller exakt ett objekt och du själv styr exakt vad som sparas och läses in.
# 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() – återställa ett enskilt objekt
readRDS() deserialiserar en .rds-fil tillbaka till ett R-objekt. Till skillnad från load() måste returvärdet tilldelas ett namn, så att du kan läsa in samma fil under olika namn i olika delar av koden.
# 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() och load() – flera objekt
save() serialiserar ett eller flera namngivna objekt till en .RData-fil. load() återställer dem, men de ursprungliga namnen återställs automatiskt. Det kan i tysthet skriva över befintliga objekt. Använd därför funktionerna med försiktighet.
# 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 jämfört med save – när ska de användas?
Använd saveRDS() för enskilda objekt när du vill ha full kontroll över namngivningen vid inläsning – det passar utmärkt för modellresultat, bearbetade datauppsättningar och cachelagrade resultat. Använd save() endast när du behöver samla flera namngivna objekt för ett specifikt arbetsflöde med en medarbetare.
# 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')Kontrollera och återställa options()
Inställningar som görs under en session gäller endast för den sessionen. För att säkerställa att skriptet är komplett anger du de inställningar du behöver högst upp och återställer vid behov de gamla värdena när skriptet avslutas med hjälp av 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-projekt för hantering av arbetsytan
Ett RStudio Project (filen .Rproj) anger automatiskt projektroten som arbetskatalog, håller en separat .Rhistory för varje projekt och isolerar sessionsinställningarna. Det är standardmetoden för att hantera självständiga R-projekt.
# 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')Snabbkontroll
Du vill spara en enskild R-data frame med namnet clean_data på disk, så att du kan läsa in den i ett annat skript under vilket variabelnamn du vill. Vilken funktion bör du använda?
Hantering av arbetsytan – viktiga slutsatser
En välhanterad R-arbetsyta är grunden för reproducerbar analys:
.RData/.Rhistory– automatiskt sparade arbetsfiler (inaktivera automatisk sparning!)rm(list = ls())– ta bort alla objekt för en ren utgångspunktoptions(scipen = 999, digits = 4)– styr talformat.Renviron– lagra API-nycklar och sökvägar som miljövariablersaveRDS(obj, 'file.rds')– cachelagra ett enskilt objektreadRDS('file.rds')– återställ under ett eget namnsave(a, b, file = 'session.RData')– samla flera objektload('session.RData')– återställ alla samlade objekt- Använd RStudio Projects för automatisk hantering av arbetskatalogen
# 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')Lär dig R med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 43
- Lektioner
- 159
Vanliga frågor
Är lektionen ”R-projekt och hantering av arbetsytan” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen R Academy, inklusive ”R-projekt och hantering av arbetsytan”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i R Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”R-projekt och hantering av arbetsytan”?
Skapa RStudio-projekt och hantera .RData, .Rhistory och .Renviron. Ni övar på R Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig R Academy?
Du behöver inga förkunskaper. Utbildningen i R Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.
Hur lång tid tar lektionen ”R-projekt och hantering av arbetsytan”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här R Academy-lektionen?
Ja. Varje R Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Använda source() för att läsa in skript
- Kommentarer, stil och läsbarhet
- Arbetskataloger och filsökvägar
- R-projekt och hantering av arbetsytan