2013-03-22 4 views
6

Я пытаюсь импортировать метод S3, predict из другого пакета pls. У меня есть функция, которая использует эти предсказанные значения. Проблема заключается в том, при составлении пакета:Импорт метода S3 из другого пакета

Error : object 'predict' is not exported by 'namespace:pls' 

Я соединил this Gist как минимальный пример, который освещает мою проблему и содержит следующий файл: R

#' Test function 
#' 
#' @importFrom pls predict 
#' 
#' @export 

myfunc <- function(x){ 
    stopifnot(class(x) == "mvr") 
    predict(x)*2 
} 

ответ

7

Основной проблемой здесь является pls не определяет функцию/способ predict. Он предоставляет несколько методов для генератора predict, но не самого общего.

Вам необходимо импортировать родовое из пакета , если вам это нужно - я не уверен, что вы это делаете, поскольку не создаете функцию, которая нужна или основывается на родовом. Как минимум, вам нужно

#' @importFrom stats predict 

хотя вам может понадобиться/хотите импортировать все STATs имен - зависит от того, что ваш пакет делает за функции вашего в настоящее время работают.

Другой вопрос заключается в том, что predict.mvr является не экспортируется из PLS имен

> require(pls) 
Loading required package: pls 

Attaching package: ‘pls’ 

The following object(s) are masked from ‘package:stats’: 

    loadings 

> predict.mvr 
Error: object 'predict.mvr' not found 
> pls::predict.mvr 
Error: 'predict.mvr' is not an exported object from 'namespace:pls' 
> pls:::predict.mvr 
function (object, newdata, ncomp = 1:object$ncomp, comps, type = c("response", 
    "scores"), na.action = na.pass, ...) 

Таким образом, вы не можете просто импортировать его. Следовательно, ваш пакет должен иметь Depends: pls в DESCRIPTION для того, чтобы найти правильный метод predict.

+1

Или вместо того, чтобы помещать 'PLS' в описание DEPENDS, просто используйте' pls ::: predict.mvr' напрямую (и убедитесь, что 'pls' является, по крайней мере, в описании IMPORTS, чтобы гарантировать его установку). – Gregor

+0

Неплохо использовать 'pls ::: predict.mvr' напрямую, тройные двоеточия являются признаком того, что вы ковыряетесь там, где автор не собирался вас. –

Смежные вопросы