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.



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.


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.


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)

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.


Por favor ponga esto como comentario. Gracias.
jess
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.