我通过DESCRIPTION文件使用RDCOMClient获得了我的R包:
建议:RDCOMClient
以及以下(完美工作)代码:
GetNewWrd <- function() {
stopifnot(require(RDCOMClient))
# Starts the Word application with wrd as handle
wrd <- RDCOMClient::COMCreate("Word.Application", existing=FALSE)
newdoc <- wrd[["Documents"]]$Add("",FALSE, 0)
wrd[["Visible"]] <- TRUE
invisible(wrd)
}
现在这似乎被认为是不好的做法,“编写R扩展,1.1.3.1建议的软件包”告诉我们制定:
if (requireNamespace("rgl", quietly = TRUE)) {
rgl::plot3d(...)
} else {
## do something else not involving rgl.
}
或:.. 如果建议的包裹不可用,则意图是出错,只需使用例如RGL :: PLOT3D格式。
重新编码(根据我的理解)意味着,只需删除require语句:
GetNewWrd <- function() {
# Starts the Word application with wrd as handle
wrd <- RDCOMClient::COMCreate("Word.Application", existing=FALSE)
newdoc <- wrd[["Documents"]]$Add("",FALSE, 0)
wrd[["Visible"]] <- TRUE
invisible(wrd)
}
执行此操作会导致以下运行时错误:
Error in RDCOMClient::COMCreate("Word.Application", existing = FALSE) :
could not find function "createCOMReference"
createCOMReference是RDCOMClient中的一个函数,如果没有显式的require语句,显然无法找到它。
为了上帝的缘故,我应该将RDCOMClient集成到我的包中,符合CRAN的政策???
答案 0 :(得分:0)
很老的问题,但我偶然发现了同样的问题。我使用以下解决方法,它不会在 R CMD check
中发出警告,但在我看来就像一个可怕的黑客:
if (requireNamespace("RDCOMClient", quietly = TRUE)) {
if (!"RDCOMClient" %in% .packages()) {
attachNamespace("RDCOMClient")
}
# ...
}