从Matrix包中导入S4函数

13

Matrix包定义了一堆S4方法来相乘矩阵,这些方法通过S4通用函数%*%crossprodtcrossprod进行调度。

我该如何导入"%*%"方法以在自己的包中使用?当我运行devtools::document()时,这段代码无法正常工作:

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

如果x是稀疏矩阵,我希望确保此函数使用Matrix包中的稀疏矩阵乘法方法。但是当我运行devtools::document()时,出现以下错误:

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

请阅读此处的最后一节:http://r-pkgs.had.co.nz/namespace.html - Roland
@import methods并没有解决我的问题,@importMethodsFrom Matrix "%*%"也不行。 - Zach
1个回答

12

你应该使用 @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)
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接