R语言中统计正则表达式匹配单词数量的正确语法及str_view结果length返回8的原因
解决stringr统计匹配单词数量的问题
嘿,我来帮你搞定这两个问题:
1. 统计正则匹配单词数量的正确方法
str_view()本质是用来可视化展示匹配结果的工具,它不会返回匹配到的单词向量,所以没法直接用它来计数。你可以用下面两种更合适的方法:
方法一:用str_detect() + sum()
str_detect()会返回一个逻辑向量(每个元素对应words里的单词是否符合正则),sum()会自动把TRUE视为1、FALSE视为0,求和后就是匹配的总数:
library(stringr) sum(str_detect(words, "^...$"))
方法二:用str_subset()提取后计数
str_subset()直接返回所有符合正则的单词组成的字符向量,再用length()就能得到数量:
length(str_subset(words, "^...$"))
两种方法都能得到正确的结果,你可以根据习惯选择~
2. 为什么length(x)会返回8?
当你运行x <- str_view(words, "^...$", match = TRUE)时,x并不是匹配到的单词向量,而是一个htmlwidget类型的对象——这是str_view()用来在RStudio里渲染可视化结果的特殊对象。
你可以试试运行str(x)或者typeof(x),就能看到它的结构里包含了可视化相关的组件(比如样式、内容容器等)。length(x)统计的是这个对象的组件个数,刚好是8,所以返回的8和匹配的单词数量完全无关哦。
内容的提问来源于stack exchange,提问作者Amaks




