当我试图将我的rpart模型转换为pmml时,我会得到以下错误
Fehler in if (ff$nsurrogate[parent_ii] > 0) { :
Fehlender Wert, wo TRUE/FALSE nötig ist
(Missing value where TRUE / FALSE is needed)此错误可由以下代码再现:
library(rpart)
library(pmml)
df <- structure(list(a = structure(c(15L, 1L, 13L, 8L, 11L, 25L, 6L,
24L, 27L, 9L, 2L, 18L, 28L, 14L, 5L, 17L, 20L, 21L, 16L, 7L,
22L, 19L, 23L, 26L, 3L, 10L, 12L, 4L), .Label = c("013", "018",
"063", "073", "122", "173", "212", "216", "296", "355", "410",
"415", "423", "428", "453", "481", "534", "586", "678", "701",
"735", "746", "778", "812", "818", "855", "864", "998"), class = "factor"),
y = c(1.029993, 0.95987, 0.95987, 0.95987, 0.95987, 0.95987,
0.95987, 0.969903, 0.95987, 0.860644, 0.95987, 0.969903,
0.900669, 0.95987, 0.95987, 0.95987, 1.12018, 0.95987, 0.95987,
0.95987, 0.95987, 0.880656, 0.95987, 0.939858, 0.95987, 0.939858,
0.95987, 0.95987)), row.names = c(NA, -28L), class = "data.frame")
model <- rpart(y ~ a, df, control = rpart.control(minsplit = 1, minbucket = 2, cp=-1))
pmml.rpart(model)sessionInfo() R版本3.5.1 (2018-07-02)平台: x86_64-redhat- Linux -gnu (64位),运行在:下 矩阵产品:默认BLAS/LAPACK: /usr/lib 64/R/lib/libRblas.so 地区:1 LC_CTYPE=de_DE.UTF-8 LC_NUMERIC=C _TIME=de_DE.UTF-8 LC_COLLATE=de_DE.UTF_8 LC_MONETARY=de_DE.UTF-8 6 LC_MESSAGES=de_DE.UTF-8 LC_纸张=de_DE.UTF-8 LC_NAME=C LC_ADDRESS=C LC_TELEPHONE=C 11 LC_ grDevices =de_DE.UTF-8附加基包:1个stats图形grDevices实用程序集数据集方法其他附加包:1 pmml_1.5.7 XML_3.98-1.16 rpart_4.1-13 通过命名空间加载(未附加):1 compiler_3.5.1 magrittr_1.5 tools_3.5.1 yaml_2.2.0 stringi_1.2.4 stringr_1.3.1
发布于 2019-01-30 12:33:39
目前,df$a是一个因素,考虑到行数等于因素级别的数量,这实际上是没有意义的。用
df$a <- as.numeric(as.character(df$a))也允许运行
pmml.rpart(model)发布于 2019-01-30 18:36:21
考虑使用r2pmml包而不是:https://github.com/jpmml/r2pmml
转换成功,上面的代码是原样的,生成的PMML模型文件更小、更干净,并且可以证明是正确的:
library("r2pmml")
r2pmml(model, "model.pmml")https://stackoverflow.com/questions/54440653
复制相似问题