Operatore di estrazione R: [vs $ [duplicate]
Ci sono più post in Internet riguardanti le differenze e le somiglianze su [e $. Vedo qualche post dove $è consigliato solo per uso interattivo ma non per programmazione. Tuttavia, non sono sicuro di aver capito se questa è una preferenza o se c'è una spiegazione dietro questa idea.
Ora diciamo che sto scrivendo un pacchetto o una funzione, se sto estraendo un elemento per nome (ad esempio mtcars[["mpg"]]) perché dovrei evitare di usarlo mtcars$mpg?
Risposte
Ci sono due differenze che contano davvero tra [[e $:
[[- funziona con le stringhe (cioè supporta la sostituzione delle variabili),$no. Se lo haimy_var = "mpg", puoi usaremtcars[[my_var]], ma non c'è un buon modo per usarlomy_varcon$.$si completa automaticamente, se il nome di una colonna parziale non è ambiguo.mtcars$mrestituirà lampgcolonna,mtcars[["m"]]torneràNULL.mtcars$drestituiràNULLperché più colonne iniziano con una "d".
# 1 rende [[più flessibile per la programmazione: è estremamente comune nell'uso programmatico lavorare con nomi di colonne archiviati come stringhe.
# 2 rende $più pericoloso - non dovresti usare nomi di colonna abbreviati nella programmazione, tuttavia nell'uso interattivo può essere carino e veloce. (Anche se questo è in gran parte discutibile con le funzionalità di completamento automatico di RStudio, se usi quell'IDE.)
$esegue la corrispondenza parziale: se hai una colonna denominata xxxin un dataframe dat, dat$xxrestituirà la xxxcolonna (a meno che tu non abbia anche una xxcolonna). Questo può essere pericoloso.
Uso sempre [["..."]]per un altro motivo: uso RStudio, e c'è una bella evidenziazione per le stringhe, mentre non c'è evidenziazione con $.