Error: no se pudo encontrar la función "%>%"

80

Estoy ejecutando un ejemplo en R, siguiendo los pasos y todo está funcionando hasta ahora, excepto que este código produce un error:

 words <- dtm %>%
 as.matrix %>%
 colnames %>%
 (function(x) x[nchar(x) < 20])

Error: no se pudo encontrar la función "%>%"

No entiendo cuál es el beneficio de usar este operador especial %>%, y cualquier comentario sería genial.

Haidar
fuente
Obtengo resultados inconsistentes según las respuestas. Está fallando 8 de cada 10 veces, pero luego funciona bien.
Shawn

Respuestas:

128

Primero debe cargar un paquete (como magrittro dplyr) que defina la función, luego debería funcionar.

install.packages("magrittr") # package installations are only needed the first time you use it
install.packages("dplyr")    # alternative installation of the %>%
library(magrittr) # needs to be run every time you start R and want to use %>%
library(dplyr)    # alternatively, this also loads %>%

El operador de tubería %>%se presentó para "disminuir el tiempo de desarrollo y mejorar la legibilidad y el mantenimiento del código".

Pero todos deben decidir por sí mismos si realmente se ajusta a su flujo de trabajo y facilita las cosas. Para obtener más información sobre magrittr , haga clic aquí. .

Si no usa la tubería %>%, este código devolvería lo mismo que su código:

words <- colnames(as.matrix(dtm))
words <- words[nchar(words) < 20]
words

EDITAR: (Estoy ampliando mi respuesta debido a un comentario muy útil que hizo @Molx)

A pesar de ser de magrittr, el operador de tubería se usa más comúnmente con el paquete dplyr(que requiere y carga magrittr), por lo que siempre que vea a alguien usando, %>%asegúrese de no cargar en su dplyr lugar.

martín
fuente
También quiere decir que el código escrito anteriormente podría escribirse de manera diferente sin la necesidad de usar%>%
Haidar
9
A pesar de ser de magrittr, el operador de tubería se usa más comúnmente con el paquete dplyr(que requiere y carga magrittr), por lo que siempre que vea a alguien usando, %>%asegúrese de no cargar en su dplyrlugar.
Molx
1
Me gustaría enfatizar que solo cargar Tidyverse ( library(tidyverse)) podría no ser suficiente. He agregado ( library(dplyr)) después library(tidyverse)y luego %>%se encontró.
RikH
15

En Windows: si usa%>% dentro de un bucle% dopar%, debe agregar una referencia al paquete de carga dplyr(o magrittr, que se dplyrcarga).

Ejemplo:

plots <- foreach(myInput=iterators::iter(plotCount), .packages=c("RODBC", "dplyr")) %dopar%
{
    return(getPlot(myInput))
}

Si omite el .packagescomando y lo usa %do%para que todo se ejecute en un solo proceso, entonces funciona bien. La razón es que todo se ejecuta en un proceso, por lo que no necesita cargar específicamente nuevos paquetes.

Aplazamiento de pago
fuente
1
Este es un buen punto y vale la pena destacarlo específicamente en relación con foreach. He tenido problemas en el pasado con esto, y es un problema diferente al que se resuelve con la respuesta aceptada.
Michael Barton
No estoy seguro de si este es el lugar correcto para resaltar esto también, pero he sugerido y editado en función del paquete de iteradores que simplifica el ciclo foreach. Siéntase libre de ignorar si esto es inapropiado.
Michael Barton
1
Gracias. Me salvó. No tenía idea de que necesitaba declarar las dependencias en foreach.
Jim G.
0

se puede utilizar lo siguiente:

 install.packages("data.table")
 library(data.table)
Direxions_Manav
fuente
respuesta incorrecta en mi humilde opinión - esto no define la función "%>%". Añadiendo estas dos líneas, todavía obtengo lo mismo:could not find function "%>%"
tchevrier hace
0

El beneficio es que se utiliza la salida de la función anterior. No es necesario repetir el origen de la fuente de datos, por ejemplo.

Cena Alfa
fuente
Por favor ponga esto como comentario. Gracias.
jess