Uso di source() per caricare gli script
Esegua script R esterni e condivida il codice tra file con source().
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 globaleecho = TRUE: stampa ogni espressione, ottimo per il debugginglocal = TRUE: esegue lo script in isolamento, senza effetti collaterali globalichdir = TRUE: sposta temporaneamente la directory di lavoro nella posizione del filesys.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
.Rprofileper 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!')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
- Uso di source() per caricare gli script
- Commenti, stile e leggibilità
- Directory di lavoro e percorsi dei file
- Progetti R e gestione dell'area di lavoro