Operatore di estrazione R: [vs $ [duplicate]

Sep 28 2020

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

5 GregorThomas Sep 28 2020 at 17:42

Ci sono due differenze che contano davvero tra [[e $:

  1. [[- funziona con le stringhe (cioè supporta la sostituzione delle variabili), $no. Se lo hai my_var = "mpg", puoi usare mtcars[[my_var]], ma non c'è un buon modo per usarlo my_varcon $.

  2. $si completa automaticamente, se il nome di una colonna parziale non è ambiguo. mtcars$mrestituirà la mpgcolonna, 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.)

2 StéphaneLaurent Sep 28 2020 at 17:40

$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 $.