Импорт функций S4 из пакета Matrix

Пакет Matrix определяет целую кучу методов S4 для умножения матриц, которые отправляются с помощью общих функций S4 %*%, crossprod и tcrossprod.

Как импортировать методы "% *%" для использования в моем собственном пакете? Эта часть кода не работает, когда я запускаю devtools::document():

#' @title my function
#'
#' @description Does magic Matrix stuff
#' @import methods
#' @importFrom Matrix "%*%" Diagonal
myfun <- function(x, y){
  x %*% Diagonal(x=y)
}

Я хочу убедиться, что эта функция использует разреженные методы умножения матрицы из пакета Matrix, если x - разреженная матрица. Но когда я запускаю devtools::document(), я получаю следующую ошибку:

Updating mypackage documentation
Loading mypackage
Error: object ‘%*%’ is not exported by 'namespace:Matrix'

Ответ 1

Вы должны использовать @importMethodsFrom и удалить кавычки вокруг оператора. Вероятно, вы также хотите экспортировать функцию с помощью @export (вы, возможно, уже знаете это, но это делает ответ более полным). Следующее работает для меня без ошибок.

#' @title my function
#'
#' @description Does magic Matrix stuff
#' @import methods
#' @importFrom Matrix Diagonal
#' @importMethodsFrom Matrix %*%
#' @export
myfun <- function(x, y){
    x %*% Diagonal(x=y)
}