R Academy · Lezione

Uso di source() per caricare gli script

Esegua script R esterni e condivida il codice tra file con source().

Lezione 1 di 413 passaggi

Uso di source() per caricare gli script è una lezione R Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento R Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso R Academy include 4 lezioni in totale.

Perché usare source()?

Quando i suoi progetti R crescono, mantenere tutto il codice in un unico file diventa difficile da gestire. La funzione source() consente di caricare ed eseguire un file di script R esterno, suddividendo il lavoro in moduli logici e riutilizzabili.

Questa è la base di uno sviluppo R organizzato.

# Imagine helpers.R contains:
# add <- function(a, b) a + b
# multiply <- function(a, b) a * b

# Load it into your main script:
source('helpers.R')

# Now use the functions defined there:
result <- add(3, 5)
cat('Result:', result)

Sintassi di base di source()

La forma più semplice di source() accetta un percorso di file come unico argomento. Il file viene letto e ogni espressione al suo interno viene valutata nell'ambiente corrente, proprio come se avesse digitato direttamente il codice.

# source() with a relative path (file in working directory)
source('my_functions.R')

# source() with an absolute path
source('/Users/alice/projects/utils.R')

# After sourcing, all objects and functions defined
# in the file are available in your current session
cat('Script loaded successfully')

Parametro echo

Il parametro echo controlla se ogni espressione del file importato con source() viene stampata nella console durante l'esecuzione. Per impostazione predefinita, echo = FALSE, così la console rimane pulita. Impostarlo su TRUE è utile per il debugging.

# Default: silent loading (echo = FALSE)
source('helpers.R')

# Verbose: print each expression as it runs
source('helpers.R', echo = TRUE)

# echo = TRUE output looks like:
# > add <- function(a, b) a + b
# > multiply <- function(a, b) a * b
cat('Done')

print.eval e verbose

Altri due parametri offrono un controllo più preciso dell'output. print.eval controlla se vengono stampati i risultati delle espressioni (in modo simile alla modalità interattiva). verbose stampa informazioni aggiuntive sul processo di importazione del file.

# print.eval: print the VALUE of each expression
source('helpers.R', echo = TRUE, print.eval = TRUE)

# verbose: extra details like file name and line numbers
source('helpers.R', verbose = TRUE)

# Typical use: debugging a complex script
# source('complex_analysis.R', echo = TRUE, print.eval = TRUE)
cat('Parameters explored')

Parametro local: ambito isolato

Per impostazione predefinita, source() esegue il codice nell'ambiente globale, quindi tutti gli oggetti creati compaiono nel workspace. Impostando local = TRUE, lo script viene eseguito in un nuovo ambiente isolato, mantenendo pulito il workspace globale.

# Without local: objects pollute global env
source('data_prep.R')        # x, y, temp_df all appear in ls()

# With local = TRUE: objects stay inside
source('data_prep.R', local = TRUE)
# x, y, temp_df are NOT in your global workspace

# Verify nothing leaked:
cat('Objects in workspace:', length(ls()))

# local can also be an environment object:
my_env <- new.env()
source('data_prep.R', local = my_env)

sys.source() per un caricamento più sicuro

sys.source() è un'alternativa di livello più basso che evita parte dell'overhead di source(). Non modifica la directory di lavoro e non valuta le opzioni keepSource. Viene spesso usata nello sviluppo dei package e negli strumenti interni.

# sys.source() loads a file into a specific environment
utils_env <- new.env()
sys.source('utils.R', envir = utils_env)

# Access functions from that environment explicitly
result <- utils_env$my_helper(10)
cat('Result:', result)

# sys.source does not echo or verbose options
# It is faster and more predictable for package internals
cat('sys.source demo complete')

Percorsi relativi e assoluti

Usare percorsi relativi in source() rende il progetto portabile: il percorso del file viene risolto rispetto alla directory di lavoro corrente. I percorsi assoluti funzionano ovunque, ma smettono di funzionare quando si sposta il progetto. Nei flussi di lavoro basati sui progetti, preferisca i percorsi relativi.

# Relative path — resolved from getwd()
source('R/helpers.R')          # good for projects
source('scripts/utils.R')      # subfolder
source('../shared/common.R')   # parent folder

# Absolute path — fragile, machine-specific
source('/Users/alice/project/R/helpers.R')

# Check current working directory first:
cat('Working dir:', getwd())

# Best practice: use file.path() for clarity
source(file.path('R', 'helpers.R'))

Importare più file

Può chiamare source() più volte per caricare diversi file di supporto. Un modello comune consiste nell'avere un unico punto di ingresso, in stile setup.R o _targets.R, che importa tutti i moduli necessari nell'ordine corretto.

# main.R — entry point that loads all modules
source('R/data_loading.R')
source('R/cleaning.R')
source('R/analysis.R')
source('R/plotting.R')

# Or source all .R files in a directory:
r_files <- list.files('R', pattern = '\\.R$', full.names = TRUE)
for (f in r_files) {
  source(f)
  cat('Loaded:', f, '\n')
}
cat('All modules loaded')

source() con chdir

Il parametro chdir cambia temporaneamente la directory di lavoro nella directory che contiene il file importato mentre questo viene eseguito. È utile quando uno script di supporto usa internamente i propri percorsi relativi.

# Suppose scripts/analysis.R uses source('helpers.R')
# and helpers.R is also in scripts/

# Without chdir: R looks for helpers.R in YOUR working dir
source('scripts/analysis.R')          # may fail

# With chdir = TRUE: working dir shifts to scripts/ temporarily
source('scripts/analysis.R', chdir = TRUE)   # helpers.R found!

# After source() returns, working dir goes back to original
cat('Working dir restored:', getwd())

Importazione all'avvio tramite .Rprofile

Il file .Rprofile nella directory home (o nella radice del progetto) viene eseguito automaticamente ogni volta che R si avvia. Può usare source() al suo interno per caricare automaticamente utility, impostare opzioni o collegare package a ogni avvio della sessione.

# .Rprofile (in ~ or project root):
# source('~/.R/my_utils.R')     # load personal helpers
# options(scipen = 999)          # no scientific notation

# To open and edit .Rprofile:
file.edit('~/.Rprofile')

# To see where .Rprofile files are looked for:
cat(Sys.getenv('R_PROFILE_USER'))

# Caution: heavy .Rprofile slows R startup
# Keep it minimal — load only what you always need
cat('.Rprofile concept shown')

source() nella pratica: modello di progetto

Un modello pratico e ordinato consiste nell'organizzare il progetto con una cartella R/ per tutti gli script di supporto e un unico file run.R o main.R che li importa. In questo modo il progetto è facile da riprodurre e condividere.

# Project structure:
# my_project/
#   run.R             <- entry point
#   R/
#     01_load.R       <- data loading
#     02_clean.R      <- data cleaning
#     03_model.R      <- modeling
#     04_report.R     <- output

# run.R content:
cat('=== Starting analysis ===\n')
source('R/01_load.R')
source('R/02_clean.R')
source('R/03_model.R')
source('R/04_report.R')
cat('=== Analysis complete ===\n')

Verifica rapida

Quale parametro di source() impedisce agli oggetti creati nel file importato di comparire nell'ambiente globale?

source(): concetti chiave

source() è il modo integrato in R per modularizzare il codice:

  • source('file.R'): carica ed esegue uno script nell'ambiente globale
  • echo = TRUE: stampa ogni espressione, ottimo per il debugging
  • local = TRUE: esegue lo script in isolamento, senza effetti collaterali globali
  • chdir = TRUE: sposta temporaneamente la directory di lavoro nella posizione del file
  • sys.source(): alternativa di basso livello usata nei package
  • Preferisca i percorsi relativi e i flussi di lavoro basati sui progetti per garantire la portabilità
  • Usi .Rprofile per importare automaticamente gli script di supporto all'avvio di R
# Quick reference
source('R/helpers.R')                        # basic load
source('R/helpers.R', echo = TRUE)           # verbose
source('R/helpers.R', local = TRUE)          # isolated
source('scripts/run.R', chdir = TRUE)        # local paths

env <- new.env()
sys.source('R/helpers.R', envir = env)       # low-level

cat('source() mastered!')
Gratis per iniziare

Impara R con un tutor IA — gratis

Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.

Corsi
43
Lezioni
159

Domande Frequenti

La lezione «Uso di source() per caricare gli script» è gratuita?

Sì — il testo completo di «Uso di source() per caricare gli script» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso R Academy, passa a CoddyKit PRO. Il corso R Academy include 4 lezioni in totale.

Cosa imparerò in «Uso di source() per caricare gli script»?

Esegua script R esterni e condivida il codice tra file con source(). Eserciti R Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare R Academy?

Non è richiesta alcuna esperienza precedente. R Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.

Quanto tempo richiede la lezione «Uso di source() per caricare gli script»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione R Academy?

Sì. Ogni lezione R Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Uso di source() per caricare gli script
  2. Commenti, stile e leggibilità
  3. Directory di lavoro e percorsi dei file
  4. Progetti R e gestione dell'area di lavoro
← Torna a R Academy