我正在开发一个 R 包,其中一个函数包含match.fun
对导入到包命名空间的包中的函数的调用。但是在加载包时,match.fun
调用找不到函数名。根据Hadley Wickham 的描述,我认为我做的一切都是正确的,但显然情况并非如此。
例子:
# in the package file header, for creation of the NAMESPACE via roxygen2:
##` @import topicmodels
# The function declaration in the package
ModelTopics <- function(doc.term.mat, num.topics, topic.method="LDA"){
topic.fun <- match.fun(topic.method)
output <- topic.fun(doc.term.mat, k=num.topics)
return(output)
}
然后在 R 中:
> library(mypackage)
> sample.output <- ModelTopics(my.dtm, topic.method="LDA", num.topics=5)
Error in get(as.character(FUN), mode = "function", envir = envir) :
object 'LDA' of mode 'function' was not found
根据我对命名空间的理解,match.fun
调用应该可以访问包命名空间,其中应该包含topicmodels
函数。但这里的情况似乎并非如此。如果我topicmodels
直接导入到 R 会话的全局命名空间,那么这可行。
任何帮助深表感谢。这是在 OSX 上运行的 R64 2.14.1。
更新:包裹在这里
重新描述文件,也许这就是问题所在:roxygen2 没有用Imports:
语句更新描述文件。但是那里也没有列出其他软件包;只有match.fun
通话似乎受到影响。
重新命名空间提取,这是导入部分:
import(catspec)
import(foreach)
import(gdata)
import(Hmisc)
import(igraph)
import(lsa)
import(Matrix)
import(plyr)
import(RecordLinkage)
import(reshape)
import(RWeka)
import(stringr)
import(tm)
import(topicmodels)