r - `tm` 包中的 `tm_map` 中的自定义函数
问题描述
我正在尝试将自定义函数添加到tm_map
包的函数中,tm
但是它将数据转换为我无法继续的不同格式。
例如我使用
library(tm)
library(qdapRegex)
docs <- data.frame(doc_id = c("doc_1", "doc_2"),
text = c("This is a text. With some more text, www.yahoo.com", "This another one. with some different text www.google.com"),
dmeta1 = 1:2, dmeta2 = letters[1:2],
stringsAsFactors = FALSE)
docs = VCorpus(DataframeSource(docs))
content(docs[[1]])
docs <- tm_map(docs, content_transformer(tolower)) # This Works fine
content(docs[[1]])
nchar_rm <- function(x){
gsub(" *\\b[[:alpha:]]{1,2}\\b *", " ", x)
} # Custom function to remove characters less than 2
docs <- tm_map(docs, nchar_rm) # implement custom function
content(docs[[1]]) # returns an error.
错误:
Error in UseMethod("content", x) :
no applicable method for 'content' applied to an object of class "character"
docs <- tm_map(docs, rm_url)
使用包中rm_url
的函数qdapRegex
也会返回错误。
解决方案
content_transformer
以同样的方式使用
library(tm)
docs <- tm_map(docs, content_transformer(nchar_rm))
content(docs[[1]])
#[1] "This text. With some more text, www.yahoo.com"
它也将与rm_url
library(qdapRegex)
docs <- tm_map(docs, content_transformer(rm_url))
content(docs[[1]])
#[1] "This is a text. With some more text,"
但是,您可能知道您可以在完全不使用tm
函数的情况下使用lapply
/ sapply
/map
等来执行此操作。
lapply(docs$text, rm_url)
lapply(docs$text, nchar_rm)
推荐阅读
- json - Ansible:如何解析循环的注册变量?
- python - 如何在不结束整个程序的情况下退出函数?(Python)
- c - openmpi:printf 不等待 scanf
- apache - 将 Jira 服务器迁移到 https - 小工具和应用搜索不再起作用
- excel - 通过 VBA 加快在多个工作表中查找出现的速度
- encryption-asymmetric - 具有多个私钥的单个公钥:可能/可行?
- android - 在 Firebase crashlytics 中看不到非致命错误
- node.js - 节点js REST API
- apache-kafka - Kafka Connect:一个接收器连接器,用于从一个主题写入多个表
- android - RecyclerView 仅显示前 2 个项目