如何在R包中查找所有函数?

41

如何查找一个包中所有的函数?我现在正在研究caTools包。如果我输入?caTools??caTools,我只会得到被命名为这样的函数的搜索结果,而不是这个包中的函数。有没有一种简单的方法可以访问R gui中的所有函数?有什么好的方法可以搜索函数吗?


没有问题,但是没有必要删除这个问题。我可以提供答案,这可能会帮助将来遇到类似问题的其他人。 - Marcin
6个回答

40

您可以使用以下代码获取包中的所有对象:

ls("package:caTools")

您可以使用以下命令获取您程序包中的所有函数签名:

lsf.str("package:caTools")

你可能有一些以 . 开头的函数名称,因此 ls(xxxx, all=TRUE) 确保列出所有导出的函数。你可以检查未导出的函数的源代码,即那些不是真正为最终用户而设计,而是在包内部使用的函数(但仍然有时对他人有用并被使用)。 - lebatsnok
3
评论:在列出包的对象或函数之前,应该先附加该包。 - mt1022
1
要仅输出函数名称,您可以将 as.character 应用于 lsf.str。 - Tripartio

32
如果您想要所有导出的函数(即通过::访问的函数),那么getNamespaceExports(pkgName)就可以实现。

如果您想要包中的所有函数,包括通过:::访问的函数,可以使用ls(getNamespace(pkgName))

stringr包为例:

getNamespaceExports("stringr")
[1] "fixed"           "ignore.case"     "invert_match"    "perl"            "str_c"               "str_count"       "str_detect"      "str_dup"         "str_extract"    
[10] "str_extract_all" "str_join"        "str_length"      "str_locate"      "str_locate_all"  "str_match"       "str_match_all"   "str_pad"         "str_replace"    
[19] "str_replace_all" "str_split"       "str_split_fixed" "str_sub"         "str_sub<-"       "str_trim"        "str_wrap"        "word" 

然而,我们知道包中存在stringr:::is.perl函数,如下所示:

setdiff(ls(getNamespace("stringr")), getNamespaceExports("stringr"))
[1] "case.ignored"    "check_pattern"   "check_string"    "compact"         "is.fixed"        "is.perl"         "match_to_matrix" "re_call"         "recyclable"     
[10] "re_mapply"   

因此,我们看到 ls(getNamespace("stringr")) 包含了所有 getNamespaceExports("stringr") 加上 ::: 函数。


1
我喜欢这个答案,因为它不需要安装额外的软件包。只使用基础内容就可以了。很酷! - Andry
请注意,ls(..., all.names = T) 可能会返回更多以点开头的名称。此外,getNamespaceExports("stringr") 不完全是 ls(getNamespace("stringr")) 的子集,因为它还从 magrittr 导出了 %>%。一般来说,两者都很有趣。 - user13963867

25

我猜你只是在寻找 help(package = caTools),这将会打开相关帮助页面并列出 "caTools" 包中的所有函数。

你也可以尝试使用 library(help = caTools),但是它似乎不能涵盖所有内容。后一种方法的好处是你可以捕获输出以便在其他地方引用:

x <- library(help = caTools)
x$info[[2]]
#  [1] "LogitBoost              LogitBoost Classification Algorithm"          
#  [2] "base64encode            Convert R vectors to/from the Base64 format"  
#  [3] "caTools-package         Tools: moving window statistics, GIF, Base64,"
#  [4] "                        ROC AUC, etc."                                
#  [5] "colAUC                  Column-wise Area Under ROC Curve (AUC)"       
#  [6] "combs                   All Combinations of k Elements from Vector v" 
#  [7] "predict.LogitBoost      Prediction Based on LogitBoost Classification"
#  [8] "                        Algorithm"                                    
#  [9] "read.ENVI               Read and Write Binary Data in ENVI Format"    
# [10] "read.gif                Read and Write Images in GIF format"          
# [11] "runmad                  Median Absolute Deviation of Moving Windows"  
# [12] "runmean                 Mean of a Moving Window"                      
# [13] "runmin                  Minimum and Maximum of Moving Windows"        
# [14] "runquantile             Quantile of Moving Window"                    
# [15] "runsd                   Standard Deviation of Moving Windows"         
# [16] "sample.split            Split Data into Test and Train Set"           
# [17] "sumexact                Basic Sum Operations without Round-off Errors"
# [18] "trapz                   Trapezoid Rule Numerical Integration"   

3

pacman软件包(CRAN)(Dev版本:GitHub)非常适用于此任务。具体来说,使用p_funs函数。

语法如下:

p_funs(caTools)  # exported
p_funs(caTools, TRUE)  # includes non-exported

2
刚才发现如果您只需进入“环境”选项卡,然后单击“全局环境”,再单击要查看的包(我在此处选择了dplyr进行演示,但在您的情况下将是caTools),则会显示所有函数、值和数据。

enter image description here

enter image description here


1
另一种方法是使用 collidr 包。
library(collidr)
library(dplyr)

collidr::CRANdf %>% 
  filter(package_names  == "caTools")

#    package_names     function_names
# 1        caTools    caTools-package
# 2        caTools       base64encode
# 3        caTools       base64decode
# 4        caTools             colAUC
# 5        caTools              combs
# 6        caTools         LogitBoost
# 7        caTools predict.LogitBoost
# 8        caTools          read.ENVI
# 9        caTools         write.ENVI
# 10       caTools           read.gif
# 11       caTools          write.gif
# 12       caTools             runmad
# 13       caTools            runmean
# 14       caTools             runmin
# 15       caTools             runmax
# 16       caTools        runquantile
# 17       caTools              runsd
# 18       caTools       sample.split
# 19       caTools          sumexact,
# 20       caTools        cumsumexact
# 21       caTools              trapz


也许这个链接应该放在发布的答案中:"collidr: Check for Namespace Collisions Across Packages and Functions on CRAN" - Anton Antonov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接