'MASS::predict.lda' 不是 'namespace:MASS' 的导出对象

'MASS::predict.lda' is not an exported object from 'namespace:MASS'

这个R代码:

Iris <- data.frame(rbind(iris3[,,1], iris3[,,2], iris3[,,3]),
                   Sp = rep(c("s","c","v"), rep(50,3)))
train <- sample(1:150, 75)
z <- MASS::lda(Sp ~ ., Iris, prior = c(1,1,1)/3, subset = train)
MASS::predict.lda(z)

给出以下错误信息:

Error: 'predict.lda' is not an exported object from 'namespace:MASS'

MASSpredict.lda 函数已记录在案,但显然不是包命名空间的一部分。为什么不呢?

这个问题很重要,因为我需要在我自己的包中使用 predict.lda,这个错误导致它无法通过 CRAN 检查。

我们可以加载包然后使用predict

library(MASS)
predict(z)

或指定:::。根据?":::"

Accessing exported and internal variables, i.e. R objects (including lazy loaded data sets) in a namespace.

MASS:::predict.lda(z)
#$class
# [1] v s s s s c s v s v v v v c v v c v c s s s s c c v c v v c s s v c s s c v s c v v s c s c s c c s v c s s c s s c c c s c s v
#[65] v v v s c s c v v s s
#Levels: c s v

#$posterior
#               c            s            v
#107 3.513603e-03 1.352029e-37 9.964864e-01
#37  2.749629e-26 1.000000e+00 5.088976e-50
# ...

或者另一种选择是从名称 space

中获取函数
predictlda <- getFromNamespace("predict.lda", "MASS")
predictlda(z)
#$class
# [1] v s s s s c s v s v v v v c v v c v c s s s s c c v c v v c s s v c s s c v s c v v s c s c s c c s v c s s c s s c c c s c s v
#[65] v v v s c s c v v s s
#Levels: c s v

#$posterior
#               c            s            v
#107 3.513603e-03 1.352029e-37 9.964864e-01
#37  2.749629e-26 1.000000e+00 5.088976e-50
# ..