如果你不介意的运行功能来更新您的YAML,从你的包的根目录运行这应该工作(使用“覆盖= FALSE”来进行测试:它会创建一个_pkgdown_new。 YAML文件):
update_yaml <- function(mypkg, overwrite = FALSE) {
require(yaml)
# _____________________________________________________________________
# Find currently missing functions in yaml file ####
curr_yaml <- yaml.load_file("_pkgdown.yaml")
curr_yaml_ref <- curr_yaml[["reference"]]
curr_funcs <- unlist(lapply(curr_yaml_ref,
FUN = function(x) (x$contents))) %>%
gsub('`', "", .)
all_pkgfuncs <- ls(paste0("package:", mypkg))
miss_funcs <- setdiff(pkg_funcs, curr_funcs)
if (length(miss_funcs) == 0) {
message("All functions are already in _pkgdown.yaml")
} else {
# _________________________________________________________________
# Look if an "Other" section already exists ####
titles <- unlist(lapply(curr_yaml_ref, FUN = function(x) (x$title)))
other_sect <- which(titles == "Other")
if (!length(other_sect) == 0) {
# _________________________________________________________________
# If the "Other" sect already exists, append missing functions ####
message(strwrap(paste(
"Adding ", paste0("`", miss_funcs, "` ", collapse = ""),
"to _pkgdown.yaml")))
curr_yaml_ref[[other_sect]] = list(
title = "Other",
desc = "Other Functions",
contents = c(curr_yaml_ref[[other_sect]]$contents,
paste0("`", miss_funcs, "`"))
)
} else {
# _____________________________________________________________
# Otherwise, create the "other" section and add ####
message("Creating the \"Others\" section")
message(strwrap(paste(
"Adding ", paste0("`", miss_funcs, "` ", collapse = ""),
"to _pkgdown.yaml")))
curr_yaml_ref[[length(curr_yaml_ref) + 1]] = list(
title = "Other",
desc = "Other Functions",
contents = paste0("`", miss_funcs, "`"))
}
curr_yaml[["reference"]] <- curr_yaml_ref
if (overwrite) {
write(as.yaml(curr_yaml), "_pkgdown.yaml")
} else {
write(as.yaml(curr_yaml), "_pkgdown_new.yaml")
}
}
}
> update_yaml("sprawl", overwrite = F)
创建 “其他” 部分
添加er_crop_object
er_getbands
er_points
er_polygons
reproj_rast
setClasses``setinfo_rast
sprawl_scalebar
到 _pkgdown.yaml
功能浏览当前.yaml文件,查找当前缺少的功能。如果发现任何内容,则将其添加到.yaml的“其他”部分(如果尚不存在,则会自动创建)。
我做了一个快速测试,它似乎正常工作。
HTH!
对于有些tricker和使用效率较低的情况下,请参见[正则表达式串不含有** **多个特定的词(https://stackoverflow.com/questions/7801581/regex-for-string-不包含多个特定词) – C8H10N4O2
这是一个好主意,但我认为它不适用于很多功能(比如说你在包中有一百个函数),而且大部分我试图去捕捉的是有人添加了一个新功能,但忘记更新'yml' – Shorpy