55.关于正则表达式在其他函数中的应用

2021-09-07  本文已影响0人  心惊梦醒

【上一篇:54.关于模式匹配的一些函数(四)】
【下一篇:56. 关于因子的一些个人理解】

    关于模式匹配的一些基本函数已经讲完了。我们的主线是stringr包中的str_*系列函数,同时比较了相对应的Base R中函数。
    还有一些其他的知识:stringr包是建立在stringi包之上的。stringr包中的函数是经过精心挑选的一组共49个用来处理最常见字符串操作的相关函数。stringi包就很复杂了,包括250个。如果你在stringr中有处理不了的问题,可以试试stringi包,两者函数的区别在于str_*和stri_*。


    在其他函数中也有正则表达式的思想,尤其是做简单的批量检索的时候。例如,你记不住函数的全名,可以用apropos();你不知道某个函数在哪个包里,可以用find();你想实现和Linux的ll找文件的功能,可以用Sys.glob();
    举个例子:

# 找带有replace字符串的函数名
> apropos("replace")
 [1] "%+replace%"                     ".rs.registerReplaceHook"       
 [3] ".rs.replaceBinding"             ".rs.rpc.replace_comment_header"
 [5] "replace"                        "replace_na"                    
 [7] "setReplaceMethod"               "str_replace"                   
 [9] "str_replace_all"                "str_replace_na"                
[11] "theme_replace"  
# 找replace_na函数在哪个包里
> find("replace_na")
[1] "package:tidyr"
# 找当前目录下带有R字符的所有文件
> Sys.glob(paste(getwd(),"*R*",sep="/"))
[1] "D:/Program Files/Rdata/01.R_basic.r"
[2] "D:/Program Files/Rdata/b.Rdata" 

    函数的Usage,我在这里说找函数其实是狭隘了,正确的应该是全局环境中的所有对象(例如一些数据集在哪个包里等):

# approach position,输出是一个按照name排序的向量
apropos(what, where = FALSE, ignore.case = TRUE, mode = "any")

what:一个字符串,函数根据给定字符串在全局环境中寻找,不能是向量
where:标出每个函数在search list中的序号,(还不知道有什么用)
mode:如果不是any,则仅匹配输出和mode(what)相同mode的结果
# 和apropos工作原理类似,返回what所在包的名字
find(what, mode = "any", numeric = FALSE, simple.words = TRUE)

what:默认搜索对象准确的名称,即simple.words=TRUE的情况
     当simple.words=FALSE时,what可以像apropos()一样是个正则表达式
numeric:作用于apropos()中的where一样,给出返回值在search list中的位置
simple.words:默认为TRUE,表明what必须是准确的名称
Sys.glob(paths, dirmark = FALSE)
paths:相对路径或绝对路径
dirmark:默认是FASLE,表明如果paths是路径,返回的结果中字符串末尾不带/
   如果是TRUE,则返回结果字符串末尾带/
### 举个栗子:
> Sys.glob(file.path(R.home(), "library", "*", "R"))
  [1] "D:/PROGRA~1/R-41~1.0/library/ATACseqQC/R"                        
  [2] "D:/PROGRA~1/R-41~1.0/library/AnnotationDbi/R"                    
  [3] "D:/PROGRA~1/R-41~1.0/library/AnnotationFilter/R"                 
  [4] "D:/PROGRA~1/R-41~1.0/library/AnnotationHub/R" 

【上一篇:54.关于模式匹配的一些函数(四)】
【下一篇:56. 关于因子的一些个人理解】

上一篇 下一篇

猜你喜欢

热点阅读