【上一篇: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"
网友评论