如何计算含指定特征的文档占比及quanteda dfm下标越界问题排查
错误原因
你遇到的Subscript out of bounds报错,是因为thetarget向量中存在部分特征没有出现在当前dfm的特征列表里,直接用特征名取dfm列子集时,找不到对应特征就会触发下标越界。增减目标词时有时成功有时失败,就是因为有时候你加的词刚好都在dfm特征里,有时候有缺失。
修复方案
先对目标特征做合法性校验,过滤掉不存在于dfm中的特征,再进行统计即可:
thetarget <- c("testing", "test", "example words", "example") # 过滤出实际存在于dfm中的目标特征 valid_targets <- intersect(thetarget, featnames(dfm)) df <- data.frame( docname = docnames(dfm), Year = docvars(dfm, "Year"), # 没有合法目标特征时直接返回全FALSE,避免报错 contains_target = if (length(valid_targets) == 0) rep(FALSE, nrow(dfm)) else rowSums(dfm[, valid_targets]) > 0, row.names = NULL )
统计脚本优化
后续按年份统计的脚本可以简化,不需要把逻辑值转成字符再匹配,直接过滤逻辑值即可:
library(dplyr) df2 <- df %>% filter(contains_target) %>% group_by(Year) %>% summarise(n = n())
内容的提问来源于stack exchange,提问作者J.Doe
相关产品推荐
相关产品推荐

