parallelize - tm_map tiene un error paralelo:: mclapply en R 3.0.1 en Mac
r multicore (8)
Estoy usando R 3.0.1 en la plataforma: x86_64-apple-darwin10.8.0 (64 bits)
Estoy tratando de usar tm_map de la biblioteca tm. Pero cuando ejecuto este código
library(tm)
data(''crude'')
tm_map(crude, stemDocument)
Me sale este error:
Warning message:
In parallel::mclapply(x, FUN, ...) :
all scheduled cores encountered errors in user code
¿Alguien sabe una solución para esto?
Acabo de encontrarme con esto. Me tomó un poco de investigación pero descubrí lo que estaba sucediendo.
Tenía una línea de código ''rdevel <- tm_map (rdevel, asPlainTextDocument)''
Ejecutando esto produjo el error
In parallel::mclapply(x, FUN, ...) : all scheduled cores encountered errors in user code
- Resulta que ''tm_map'' llama a algún código en ''paralelo'' que intenta averiguar cuántos núcleos tienes. Para ver lo que está pensando, escriba
> getOption("mc.cores", 2L) [1] 2 >
- ¡Ajá momento! ¡Dile a la llamada ''tm_map'' que use solo un núcleo!
> rdevel <- tm_map(rdevel, asPlainTextDocument, mc.cores=1) Error in match.fun(FUN) : object ''asPlainTextDocument'' not found > rdevel <- tm_map(rdevel, asPlainTextDocument, mc.cores=4) Warning message: In parallel::mclapply(x, FUN, ...) : all scheduled cores encountered errors in user code >
Entonces, con más de un núcleo, en lugar de darle el mensaje de error, ''paralelo'' simplemente le dice que hubo un error en cada núcleo. No ayuda, paralelo! Olvidé el punto: ¡se supone que el nombre de la función es ''como.PlainTextDocument''!
Entonces, si recibe este error, agregue ''mc.cores = 1'' a la llamada ''tm_map'' y ejecútelo nuevamente.
Encontré una respuesta a esta que me resultó exitosa en esta question : Charles Copley, en su answer , indica que cree que el nuevo paquete tm requiere lazy = TRUE
para definirse explícitamente.
Entonces, tu código se vería así
library(tm)
data(''crude'')
tm_map(crude, stemDocument, lazy = TRUE)
También lo probé sin SnowballC para ver si era una combinación de esas dos respuestas. No pareció afectar el resultado de ninguna manera.
Estaba trabajando en los datos de Twitter y obtuve el mismo error en la pregunta original mientras intentaba convertir todo el texto a menor con la función tm_map()
Warning message: In parallel::mclapply(x, FUN, ...) :
all scheduled cores encountered errors in user code
La instalación y carga del paquete SnowballC
resolvió el problema completamente. Espero que esto ayude.
He estado enfrentando el mismo problema pero finalmente lo solucioné. Supongo que si nombro el corpus como "longName" o "companyNewsCorpus", obtengo el problema, pero si uso el valor de corpus como "a", funciona bien. Muy raro.
El siguiente código da el mismo mensaje de error mencionado en este hilo
companyNewsCorpus <-Corpus(DirSource("SourceDirectory"),
readerControl = list(language="english"))
companyNewsCorpus <- tm_map(companyNewsCorpus,
removeWords, stopwords("english"))
Pero si convierto esto a continuación, funciona sin problemas.
a <-Corpus(DirSource("SourceDirectory"),
readerControl = list(language="english"))
a <- tm_map(a, removeWords, stopwords("english"))
Ligeramente relacionado con esta pregunta, pero lo que me solucionó el error en la biblioteca (SnowballC): no hay un paquete llamado ''SnowballC'' fue ejecutar R como administrador en Windows 10 y volver a intentar la instalación, esta vez funcionó
Me encontré con el mismo problema en tm
usando un Intel Quad Core I7 que se ejecuta en Mac OS X 10.10.5, y obtuve la siguiente advertencia:
En mclapply (contenido (x), FUN, ...) error encontrado en el núcleo 1 en el código de usuario, todos los valores del trabajo se verán afectados
Estaba creando un corpus después de descargar los datos de Twitter.
La solución de Charles Copley también funcionó para mí. Utilicé: tm_map(*filename*, stemDocument, lazy = TRUE)
después de crear mi corpus y luego tm funcionó correctamente.
Sospecho que no tiene instalado el paquete SnowballC
, que parece ser necesario. Se supone que stemDocument
ejecuta stemDocument
en todos los documentos usando mclapply
. Intente simplemente ejecutar la función stemDocument
en un documento, para que pueda extraer el error:
stemDocument(crude[[1]])
Para mí, tengo un error:
Error in loadNamespace(name) : there is no package called ‘SnowballC’
Así que seguí adelante e instalé SnowballC
y funcionó. Claramente, SnowballC
debería ser una dependencia.
También me encontré con este mismo problema mientras utilizaba la función removeWords de la biblioteca tm. Algunas de las otras respuestas, como establecer el número de núcleos en 1, funcionaron para eliminar el conjunto de palabras de parada en inglés, sin embargo, también quise eliminar una lista personalizada de nombres y apellidos de mi corpus, y estas listas eran más de 100,000 palabras largas cada uno.
Ninguna de las otras sugerencias ayudaría a este problema y resulta que, a través de algunas pruebas y errores, removeWords parecía tener una limitación de 1000 palabras en un vector. Así que escribí esta función que resolvió el problema para mí:
# Let x be a corpus
# Let y be a vector containing words to remove
removeManyWords <- function (x, y) {
n <- ceiling(length(y)/1000)
s <- 1
e <- 1000
for (i in 1:n) {
x <- tm_map(x, content_transformer(removeWords), y[s:e])
s <- s + 1000
e <- e + 1000
}
x
}
Esta función esencialmente cuenta cuántas palabras hay en el vector de palabras que quiero eliminar, y luego las divide por 1000 y se redondea al número entero más cercano, n. Luego hacemos un bucle a través del vector de palabras para eliminar n veces. Con este método no necesité usar lazy = TRUE o cambiar el número de núcleos para usar, como se puede ver en la función de removeWords real. ¡Espero que esto ayude!