在R中使用grep在多个加载的包中搜索函数 [英] Searching functions using grep over multiple loaded packages in R

查看:165
本文介绍了在R中使用grep在多个加载的包中搜索函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

可以说我有package base dplyr data.table tidyr 等。 sapply()

  sapply(c(dplyr,data.table,tidyr),library,character.only = TRUE)

$ p p $ p


$ b pre $ > ls(package:data.table)

现在如果我想在> dplyr 内搜索函数,以开头。模式I do

  grep(is\\\。,ls(package:dplyr),value = TRUE)
#[1]is.grouped_df is.identis.sqlis.src
#[5]is.tbl

我的目标是搜索以开头的所有函数。 as。或同时在多个包中的任何其他模式。代码我认为会很长,即低于我有 dplyr base 函数的列表,然后添加grep模式。


$ b

  grep(is \\\。,c(ls(package :dplyr),ls(package:base)),value = T)


$ b 函数 search()会给我加载的包列表。但是如何收集加载的包的所有功能,以便稍后 grep 就可以了。



单个包,函数列表可以通过

  ls(package:package_name)

任何帮助都会得到高度评价。

解决方案

<

  x < -  grep('package:', search(),value = TRUE)#以下由danielson 
#评论(package:base,package:data.table)

sapply(x,function(x){
paste0(x,:,grep(is \ \。,ls(x),value = TRUE))
})

输出:

  $`package:base` 
[1]package:base :is.arraypackage:base:is.atomic
[3]package:base:is.callpackage:base:is.character
[5]package:base :is.complexpackage:base:is.data.frame
[7]package:base:is.doublepackage:base:is.element
...

$`package:data.table`
[1]package:data.table:is.data.table


Lets say I have package base, dplyr, data.table, tidyr etc. loaded using sapply().

 sapply(c("dplyr","data.table","tidyr"),library,character.only=TRUE)

So to check the list of functions in a particular package I do

 ls("package:data.table")

Now if I want to search for functions inside dplyr starting with is. pattern I do

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

My Goal is to search for all the functions starting with is. or as. or any other pattern in multiple packages simultaneously. The code I think would be lengthy i.e. below I have combined list of dplyr and base functions and then added grep pattern. How to do it for many loaded packages?

 grep("is\\.",c(ls("package:dplyr"),ls("package:base")),value=T)

Function search() would give me list of loaded packages. But how to gather all the functions of loaded packages, so that I can later grep on it.

For a single package, list of functions can be obtained by

 ls("package:package_name")  

Any help is highly appreciated.

解决方案

To get a list of all packages which are loaded, use:

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))
})

Output:

$`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"

这篇关于在R中使用grep在多个加载的包中搜索函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆