2014-12-09 10 views
10

Attualmente sto creando un pacchetto e mi chiedevo se c'era un modo per chiamare l'operatore %>% da dplyr senza effettivamente allegare il pacchetto dplyr. Ad esempio, con qualsiasi funzione esportata da un pacchetto, è possibile chiamarla con i doppi due punti (::). Quindi, se volessi utilizzare la funzione group_by senza collegare dplyr, inserirò dplyr::group_by. C'è qualcosa di simile per gli operatori?Utilizzare%>% operator da dplyr senza caricare dplyr in R

+4

Penso che la funzione '%>%' sia effettivamente importata da 'pkg: magrittr'. Dovresti citare o backtick il '%>%' –

+1

Dovrai usare 'magrittr :: \'%>% \ '' – Andrie

+0

Grazie per l'aiuto ragazzi! –

risposta

14

È possibile fare riferimento a qualsiasi oggetto con un nome non standard racchiudendo i backtick. Questo significa che si può fare questo:

`%>%` <- magrittr::`%>%` 

Questo definirà l'operatore %>% nell'ambiente corrente. Per esempio:

iris %>% head 

    Sepal.Length Sepal.Width Petal.Length Petal.Width Species 
1   5.1   3.5   1.4   0.2 setosa 
2   4.9   3.0   1.4   0.2 setosa 
3   4.7   3.2   1.3   0.2 setosa 
4   4.6   3.1   1.5   0.2 setosa 
5   5.0   3.6   1.4   0.2 setosa 
6   5.4   3.9   1.7   0.4 setosa 
+0

Grazie mille Andrie! –

8

Il modo più semplice sarebbe caricare il pacchetto magrittr, che funziona solo con le tubature, ed è la fonte originale di %>%. Se non vuoi caricare alcun pacchetto, puoi comunque usare %>%, ma non in modo veramente utile (a meno che non lo definisci nel tuo ambiente come suggerisce Andrie). Di utilizzarlo con :: sarebbe andata in questo modo:

# standard use 
mtcars %>% summary() 
# :: use 
magrittr::"%>%"(mtcars, summary()) 

È davvero perdere qualsiasi vantaggio di leggibilità/non nidificazione con questo metodo.

Dato che si sta creando un pacchetto, è necessario inserire magrittr in Importazioni o anche solo noi importaFrom e utilizzare la funzione "%>%". See here per maggiori informazioni.

2

Se si dispone di 'dplyr' installato, ma non caricato si può ottenere un risultato con:

dplyr::`%>%` # Note the backticks, although quotes work as well. 

che visualizza il codice, ma in fondo si vede che il suo ambiente è in realtà il NAMESPACE di "magritter" che importa "dplyr". Come sottolineano gli altri due intervistati esperti, ci sono un paio di modi per usarlo come funzione anche se non può essere solo interposto tra un argomento lhs e un argomento a meno che non si crei una copia locale che ha il "%" di fiancheggiamento o chiamata con le parentesi funzionali. Il parser R non consente:

> mtcars dplyr::"%>%" summary() 
Error: unexpected symbol in " mtcars dplyr"