如何区分包含大量函数的包中的辅助函数和主要函数?是否有办法通过某种标准标识符在R中实现它们之间的分离?
例如,我在R会话中使用sets包,如下所示。我将如何从下面给出的列表中分离出帮助函数和主要函数。我可以通过阅读文档(有时将函数显式地记录为助手函数)来完成,但是是否有标准标识符在R中实现,即函数是辅助函数还是主函数?
library(sets)
ls("package:sets")
[1] "%..%" "%<%" "%<=%"
[4] "%>%" "%D%" "%e%"
[7] "%is%" "as.cset" "as.gset"
[10] "as.interval" "as.set" "as.tuple"
[13] "binary_closure" "binary_reduction" "canonicalize_set_and_mapping"
[16] "charfun_generator" "closure" "cset"
[19] "cset_bound" "cset_cardinality" "cset_cartesian"
[22] "cset_charfun" "cset_combn" "cset_complement"
[25] "cset_concentrate" "cset_contains_element" "cset_core"
[28] "cset_defuzzify" "cset_difference" "cset_dilate"
[31] "cset_dissimilarity" "cset_has_missings" "cset_height"
[34] "cset_intersection" "cset_is_crisp" "cset_is_empty"
[37] "cset_is_equal" "cset_is_fuzzy_multiset" "cset_is_fuzzy_set"
[40] "cset_is_multiset" "cset_is_proper_subset" "cset_is_set"
[43] "cset_is_set_or_fuzzy_set" "cset_is_set_or_multiset" "cset_is_subset"
[46] "cset_matchfun" "cset_matchfun<-" "cset_mean"
[49] "cset_memberships" "cset_normalize" "cset_orderfun"
[52] "cset_orderfun<-" "cset_outer" "cset_peak"
[55] "cset_power" "cset_product" "cset_similarity"
[58] "cset_sum" "cset_support" "cset_symdiff"
[61] "cset_transform_memberships" "cset_union" "cset_universe"
[64] "e" "fuzzy_bell" "fuzzy_bell_gset"
[67] "fuzzy_cone" "fuzzy_cone_gset" "fuzzy_inference"
[70] "fuzzy_logic" "fuzzy_normal" "fuzzy_normal_gset"
[73] "fuzzy_partition" "fuzzy_pi3" "fuzzy_pi3_gset"
[76] "fuzzy_pi4" "fuzzy_pi4_gset" "fuzzy_rule"
[79] "fuzzy_sigmoid" "fuzzy_sigmoid_gset" "fuzzy_system"
[82] "fuzzy_trapezoid" "fuzzy_trapezoid_gset" "fuzzy_triangular"
[85] "fuzzy_triangular_gset" "fuzzy_tuple" "fuzzy_two_normals"
[88] "fuzzy_two_normals_gset" "fuzzy_variable" "gset"
[91] "gset_bound" "gset_cardinality" "gset_cartesian"
[94] "gset_charfun" "gset_combn" "gset_complement"
[97] "gset_concentrate" "gset_contains_element" "gset_core"
[100] "gset_defuzzify" "gset_difference" "gset_dilate"
[103] "gset_dissimilarity" "gset_has_missings" "gset_height"
[106] "gset_intersection" "gset_is_crisp" "gset_is_empty"
[109] "gset_is_equal" "gset_is_fuzzy_multiset" "gset_is_fuzzy_set"
[112] "gset_is_multiset" "gset_is_proper_subset" "gset_is_set"
[115] "gset_is_set_or_fuzzy_set" "gset_is_set_or_multiset" "gset_is_subset"
[118] "gset_mean" "gset_memberships" "gset_normalize"
[121] "gset_outer" "gset_peak" "gset_power"
[124] "gset_product" "gset_similarity" "gset_sum"
[127] "gset_support" "gset_symdiff" "gset_transform_memberships"
[130] "gset_union" "gset_universe" "integers"
[133] "integers2reals" "interval" "interval_complement"
[136] "interval_contains_element" "interval_difference" "interval_division"
[139] "interval_domain" "interval_intersection" "interval_is_bounded"
[142] "interval_is_closed" "interval_is_countable" "interval_is_degenerate"
[145] "interval_is_empty" "interval_is_equal" "interval_is_finite"
[148] "interval_is_greater_than" "interval_is_greater_than_or_equal" "interval_is_half_bounded"
[151] "interval_is_left_bounded" "interval_is_left_closed" "interval_is_left_open"
[154] "interval_is_left_unbounded" "interval_is_less_than" "interval_is_less_than_or_equal"
[157] "interval_is_proper" "interval_is_proper_subinterval" "interval_is_right_bounded"
[160] "interval_is_right_closed" "interval_is_right_open" "interval_is_right_unbounded"
[163] "interval_is_subinterval" "interval_is_unbounded" "interval_is_uncountable"
[166] "interval_measure" "interval_power" "interval_product"
[169] "interval_sum" "interval_symdiff" "interval_union"
[172] "is.charfun_generator" "is.cset" "is.gset"
[175] "is.interval" "is.set" "is.tuple"
[178] "is_element" "LABEL" "LABELS"
[181] "make_set_with_order" "matchfun" "naturals"
[184] "naturals0" "pair" "reals"
[187] "reals2integers" "reduction" "set"
[190] "set_cardinality" "set_cartesian" "set_combn"
[193] "set_complement" "set_contains_element" "set_dissimilarity"
[196] "set_intersection" "set_is_empty" "set_is_equal"
[199] "set_is_proper_subset" "set_is_subset" "set_outer"
[202] "set_power" "set_similarity" "set_symdiff"
[205] "set_union" "sets_options" "singleton"
[208] "triple" "tuple" "tuple_is_ntuple"
[211] "tuple_is_pair" "tuple_is_singleton" "tuple_is_triple"
[214] "tuple_outer"
发布于 2014-04-21 18:28:01
通常,“助手”函数(定义为:主函数使用的函数和终端用户通常不直接使用的函数)不导出,除非使用package_name:::helper_function_name语法,否则不可见。如果一个函数是可见的并记录在案,它通常是一个主函数。因此,如果您想查看主函数,只需使用ls
ls("package:sets")如果您想要所有函数(main + helper):
ls(getNamespace("sets"))最后,要获取辅助函数,请使用setdiff
setdiff(ls(getNamespace("sets")), ls("package:sets"))看这个SO Q/A for some discussion。
一个潜在的模糊性是,有时S3方法没有显式导出,即使它们打算用作“主”函数。
发布于 2014-04-21 18:25:38
R库的NAMESPACE文件应该包括公开的导出函数列表。因此,公开(因此是公共)和非公开(因此是内部/私有)函数有很好的定义。“main”和“helper”函数没有正式定义。你可能认为只有“主要”功能才应该公开,但我不认为这是明确的。
懒惰的开发人员有时会在命名空间文件中包含exportPattern("^[[:alpha:]]+"),从而公开所有函数。在这种情况下,我可能怀疑库的公开函数都与main/helper函数混合在一起。但是,当我检查sets的NAMESPACE文件时,它组织得很好,因此,我认为sets的公开功能是很好的维护和必要的。
https://stackoverflow.com/questions/23203181
复制相似问题