У меня был R-пакет с использованием RDCOMClient через файл DESCRIPTION:
Предлагает: 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.
Перекодирование этого (насколько я понимаю) означало бы просто удалить оператор требования:
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???
createCOMReference
нельзя экспортировать из RDCOMClient. Вы смотрели на другие принятые пакеты, такие какDescTools
? Кроме того, теперь, когда я снова прочитал раздел 1.1.3.1, я не думаю, что он говорит о том, что вы не можете использоватьrequire
, а скорее о том, что в тех случаях, когда это необязательно, маршрутrequireNamespace
может создать меньше проблем. Опасается, что функции могут быть перезаписаны. Это маловероятно для функций RDCOMClient. - person IRTFM   schedule 13.01.2015