通过嵌套表达式搜索::
运算符引用的命名空间的优雅方法是什么?例如:
findnamespaces <- function(expr){
namespaces <- character()
if(is.call(expr) && identical(expr[[1]], as.name("::"))){
namespaces <- deparse(expr[[2]])
}
if(!is.name(expr) && !is.atomic(expr)){
for(i in seq_along(expr)){
namespaces <- c(namespaces, findnamespaces(expr[[i]]))
}
}
return(unique(namespaces))
}
似乎可以解决基本案例:
code <- "foo::test(bar::test)\n function(x){return(baz::test)}"
findnamespaces(parse(text=code))
[1] "foo" "bar" "baz"
然而,感觉有点hacky。是否有一个更原生的方法做这样的事情?似乎CMD check
需要它来验证Suggests:
中是否正确声明了所有DESCRIPTION
个包。