Te recomendamos que revises esta respuesta en un ambiente controlado antes de enviarlo a producción, un saludo.
Solución:
No está accediendo a la lista correctamente y no está recuperando los elementos del resultado de %in%
(que da un vector lógico de VERDADERO/FALSO). Deberías hacer algo como esto:
unlist(str1)[!(unlist(str1) %in% stopWords)]
(o)
str1[[1]][!(str1[[1]] %in% stopWords)]
Por todo data.frame
df1, podrías hacer algo como:
'%nin%' <- Negate('%in%')
lapply(df1[,2], function(x)
t <- unlist(strsplit(x, " "))
t[t %nin% stopWords]
)
# [[1]]
# [1] "string" "string."
#
# [[2]]
# [1] "string" "slightly" "string."
#
# [[3]]
# [1] "string" "string."
#
# [[4]]
# [1] "string" "slightly" "shorter" "string."
#
# [[5]]
# [1] "string" "string" "strings."
Primero. deberías deslistar str1
o usar lapply
si str1
es vectorial:
!(unlist(str1) %in% words)
#> [1] TRUE TRUE FALSE FALSE TRUE TRUE FALSE FALSE FALSE FALSE TRUE
Segundo. Solución compleja:
string <- c("This string is a string.",
"This string is a slightly longer string.",
"This string is an even longer string.",
"This string is a slightly shorter string.",
"This string is the longest string of all the other strings.")
rm_words <- function(string, words)
stopifnot(is.character(string), is.character(words))
spltted <- strsplit(string, " ", fixed = TRUE) # fixed = TRUE for speedup
vapply(spltted, function(x) paste(x[!tolower(x) %in% words], collapse = " "), character(1))
rm_words(string, tm::stopwords("en"))
#> [1] "string string." "string slightly longer string." "string even longer string."
#> [4] "string slightly shorter string." "string longest string strings."
Reseñas y valoraciones del tutorial
Tienes la opción de añadir valor a nuestro contenido tributando tu experiencia en las crónicas.
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)