在R中使用grep搜索多个已加载包的函数

Sow*_*ian 7 regex perl grep r pattern-matching

可以说我有包base,dplyr,data.table,tidyr等用装sapply().

 sapply(c("dplyr","data.table","tidyr"),library,character.only=TRUE)
Run Code Online (Sandbox Code Playgroud)

所以要检查特定包中的函数列表

 ls("package:data.table")
Run Code Online (Sandbox Code Playgroud)

现在,如果我想dplyris.模式开始搜索内部的函数

 grep("is\\.",ls("package:dplyr"),value=TRUE)
 # [1] "is.grouped_df" "is.ident"      "is.sql"        "is.src"       
 # [5] "is.tbl" 
Run Code Online (Sandbox Code Playgroud)

我的目标是要搜索的所有功能开始is.as.在多个包同时或任何其他模式.我认为代码很长,即下面我已经合并了列表dplyrbase函数,然后添加了grep模式.如何为许多加载的包做到这一点?

 grep("is\\.",c(ls("package:dplyr"),ls("package:base")),value=T)
Run Code Online (Sandbox Code Playgroud)

函数search()会给我加载包的列表.但是如何收集加载包的所有功能,以便我以后可以grep使用它.

对于单个包,可以通过获得功能列表

 ls("package:package_name")  
Run Code Online (Sandbox Code Playgroud)

任何帮助都非常感谢.

Tim*_*sen 6

要获取所有已加载的包的列表,请使用:

x <- grep('package:',search(),value=TRUE)  # Comment below by danielson
# e.g. ("package:base", "package:data.table")

sapply(x, function(x) {
    paste0(x, ":", grep("is\\.", ls(x),value=TRUE))
})
Run Code Online (Sandbox Code Playgroud)

输出:

$`package:base`
 [1] "package:base:is.array"              "package:base:is.atomic"
 [3] "package:base:is.call"               "package:base:is.character"
 [5] "package:base:is.complex"            "package:base:is.data.frame"
 [7] "package:base:is.double"             "package:base:is.element"
 ...

$`package:data.table`
[1] "package:data.table:is.data.table"
Run Code Online (Sandbox Code Playgroud)

  • 上面的代码中的`x < - grep('package:',search(),value = TRUE)` (2认同)
  • `x < - .packages()`也可以 (2认同)
  • 为什么不删掉`grep`并在`ls()`中使用`pattern` arg?`ls("package:base",pattern ="is \\.")` (2认同)