Как импортировать оператора (% *% из матрицы) в пакет в R? - PullRequest
0 голосов
/ 09 апреля 2020

Ошибка при обращении к оператору %*% из пакета Matrix при использовании Matrix::%*%. Я также получаю сообщение об ошибке при попытке импортировать его в свой пакет, используя #' @importFrom Matrix %*%.

# This works:
x <- ("test words for fun", "I like words as they are fun", "they have fun with words")
library(quanteda)
dtm <- quanteda::dfm(x, verbose = FALSE)
library(Matrix)
dtm_ok <- t(dtm) %*% dtm

# However, below does not work
dtm_ok <- t(dtm) Matrix::%*% dtm

#Further detaching the Matrix library result in an error
detach("package:Matrix", unload=TRUE)
dtm_ok <- t(dtm) %*% dtm

#neither does it work to import it for the package with 
#' @importFrom Matrix %*%

# However, when only trying to import the %*% from Matrix it says  Error: '%*%' is not an exported object from 'namespace:Matrix'
import::from("Matrix", "%*%")

Так что не знаете, как мне поступить Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 09 апреля 2020

#' @importFrom должно работать, если ваша функция инкапсулирована в документированном пакете, чье NAMESPACE генерируется roxygen2. Если вы хотите использовать %*% в сеансе R без вызова library(Matrix), я рекомендую вам взглянуть на красивый пакет import.

Например,

import::from("magrittr", "%>%")

будет сделать трубу %>% доступной, не прикрепляя весь пакет magrittr или dplyr. В вашем случае, если вы хотите импортировать только t из Matrix, вы должны сделать

import::from("Matrix","t")
t
# standardGeneric for "t" defined from package "base"

# function (x) 
# standardGeneric("t")
# <environment: 0x55f0171c7520>
# Methods may be defined for arguments: x
# Use  showMethods("t")  for currently available ones.

Это немного похоже на from ... import ... в python.

Однако имейте в виду, что при таком импорте метод должен быть явно задокументирован, если вы намерены повторно выполнить код или поделиться им (поскольку код нарушается при использовании базового метода)

0 голосов
/ 09 апреля 2020

Это работает, когда я использую Matrix :: t вместо:

dtm_ok <- Matrix::t(dtm) %*% dtm

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...