R中字符串处理惩罚和grep的用法
R凡是被用来举办数值计较较量多,字符串处理惩罚相对较少,并且关于字符串的函数也不多,用得多的就是substr、strsplit、paste、regexpr这几个了。实际上R关于字符串处理惩罚的成果长短常强大的,因为它甚至可以直接利用Perl的正则表达式,这也是R的一个理念,作为语言就把向量计较做到极致,作为情况,就在各规模都集成较好的。R中有grep系列的函数,可以用最强大的方法处理惩罚字符串的所有问题。
grep的全称是global search regular expression and print out the line,是Unix下一种强大的文本搜索东西,可以通过正则表达式搜索文本,并把匹配的行打印出来,包罗grep、egrep和fgrep(egrep是扩展的grep,fgrep是快速的搜寻方法并没有真正操作正则表达式)。Linux下利用GNU版的grep,该套类型也被遍及地利用,R中的grep函数就是个中之一。
grep的焦点就是正则表达式(Regular Expressions,凡是缩写为regex),所谓正则表达式,就是用某种模式去匹配一类字符串的一个公式,许多文本编辑器可能措施语言都支持该方法举办字符串的操纵,最开始是由上文先容的Unix东西grep之类普及的,厥后获得遍及应用。尤其是Perl语言中将正则表达式发挥到了极致。
R中的正则表达式很是专业,从grep系列函数的参数就可以看出,有个参数“extended”,默认为T,暗示利用扩展grep,也就是egrep,假如选择为F就暗示基本的grep,不外该种方法不被R推荐,纵然利用了也会呈现告诫,实际上grep能做的egrep也都能做,并且还要简朴不少。我刚开始在egrep中利用老是不能通过,厥后发明其实egrep中更简朴,许多时候直接写在[]内就行。尚有一个参数“perl”,默认为F,假如选择T暗示利用Perl的正则表达式法则,成果越发强大,不外假如没有专门学过Perl语言的话用egrep也就够了。另一个参数“fixed”固然描写的不是同一个对象,可是也很相关,选择之后就会举办较准确的匹配,不再利用正则表达式的法则,在效率上会快许多,我以为这个大概就是fgrep。R的辅佐文档中也明晰说明白这三个参数实际上代表了四种模式,通例grep、扩展grep、Perl正则表达式、较准确匹配,利用者可以按照详细的寄义选择本身需要的,假如参数配置互有斗嘴,会自动忽略后头的参数,并会在Warning中明晰指出。
grep系列函数其实包罗grep、grepl、sub、gsub、regexpr、gregexpr,他们的参数很雷同,在R中也是把辅佐文档集成在了一起,查找任意一个城市获得一个统一的文档。内里对各个参数也是一起先容的,除了适才说的三个以外,第一个参数就是最重要的“pattern”,这是一个字符串,直接暗示正则表达式,按照模式的差异留意法则就行,别的有个“x”暗示要查找的向量,这也是R中的奇特之处,不是查找文件,而是查找向量,该处也可以只输入一个字符串,就成了基本的字符串处理惩罚函数。对付grep函数,功效只有匹配可能不匹配,因此匹配时输出向量中该元素的下标,假如是单个字符就输出1,对付grepl,和grep其实一样,不外输出的是逻辑值,匹配就是T,不匹配就是F。参数“value”默认为F,输出的值就是适才说的元素下标可能逻辑值,假如改成T,就会输出查找的字符串。尚有一个参数“ignore.case”,默认是F,暗示巨细写敏感,可以改为T,暗示巨细写不敏感。参数“useBytes”默认是F,暗示按字符查找,假如是T则暗示按字节查找,对付中文字符影响照旧很大的。参数“invert ”默认为F,暗示正常的查找,假如为T则查找模式的补集。像sub和gsub这样的替换函数,还多一个参数“replacement”,用来暗示替换的字符。
这些函数的参数都较量雷同,可是输出各纷歧样,grep输出向量的下标,实际上就是找到与没找到,grepl返回的逻辑值更能说明问题。sub是一个很强大的替换函数,远胜过substr,正则表达式中可以配置很是机动的法则,然后返回被替换后的字符串,假如正则表达式写得好,根基可以办理所有子字符串的问题。sub函数和gsub函数的不同在于前者匹配第一次切合模式的字符串,后者匹配所有切合模式的字符串,也就是说在替换的时候前者只替换第一次切合的,后者替换所有切合的。regexpr和gregexpr被利用的好像较量多,因为它们很像其他语言中的instr函数,可以查找到某些字符在字符串中呈现的位置,不外我以为用处并不是很大,因为凡是环境下寻找某字符位置的目标就是为了做相关处理惩罚,而sub都能搞定。regexpr和gregexpr的干系和sub与gsub差不多,gregexpr操纵向量时会返回列表。
以上就是grep系列函数的一些用法,按照例子可以很利便地利用,小我私家发起利用参数“pattern”和“x”就行(sub和gsub虽然尚有replacement),其他的都用默认的。在pattern中凭据egrep的法则写正则表达式,根基上可以办理所有的字符串处理惩罚问题。只需要对正则表达式有简朴的相识,就可以获得R中这些强大的成果。关于正则表达式的用法就在后文中解析了。