voglio parametrizzare il seguente calcolo utilizzando dplyr
che trova che i valori di Sepal.Length
sono associati con più di un valore di Sepal.Width
:argomenti Passo a dplyr funzioni
library(dplyr)
iris %>%
group_by(Sepal.Length) %>%
summarise(n.uniq=n_distinct(Sepal.Width)) %>%
filter(n.uniq > 1)
Normalmente vorrei scrivere qualcosa di simile:
not.uniq.per.group <- function(data, group.var, uniq.var) {
iris %>%
group_by(group.var) %>%
summarise(n.uniq=n_distinct(uniq.var)) %>%
filter(n.uniq > 1)
}
Tuttavia, questo approccio genera errori poiché dplyr
utilizza non-standard evaluation. Come dovrebbe essere scritta questa funzione?
Per una questione di stile, sconsiglio di usare il punto nei nomi nella moderna R, tranne che nei generici S3. È terribilmente confuso. La convenzione di denominazione usata (tra l'altro) da 'dplyr' è molto più bella:' names_with_underscores'. –
Sono consapevole che [la guida allo stile di Hadley Wickham] (http://adv-r.had.co.nz/Style.html) raccomanda la notazione del trattino basso, ma la [Guida allo stile di Google R] (https: // google -styleguide.googlecode.com/svn/trunk/Rguide.xml) promuove il periodo (anche se non per le funzioni, che ho fatto qui). In altre lingue il periodo è utilizzato per l'accesso ai membri (ad esempio 'myArray.length' in javascript), c'è un altro conflitto in R? – asnr
Le guide di stile di Google sono spesso terribili. In questo caso particolare, il problema è che conduce le ambiguità con i metodi S3: è 'some.class.method' un metodo' some' di classe 'class.method' o è un metodo' some.class' di classe ' method'? Inoltre, porta a nomi incoerenti quando parti del codice sono implementate in C (++), dal momento che non supporta i punti nei nomi, rendendo necessaria la mappatura dei nomi delle funzioni di backend a diversi nomi R. –