我有一个数据框。很多变量的名称都是这样的:
/messages/with/:userid/
/:id/
我使用以下方式阅读数据:
read.csv(file="file-path", header=TRUE,
sep=",", check.names = F)
以便保留原始名称(使用check.names = F
)。
我使用 rpart 从数据中训练决策树模型,然后尝试使用以下方法将树模型保存为 pmml 格式:
saveXML(pmml(dt.model, model.name = "DecisionTree_Model",
app.name = "model_lr.pmml",
description = "Decision Tree Model",
unknownValue=0), "dt_model.pmml")
但是,这会导致以下错误:
字段$ class [[field $ name [i]]]:下标超出范围
时出错
我认为原因是,变量名称包含:
,因此列索引被搞砸了。
我本可以用check.names = T
读取数据,因此变量名称看起来像:
X.messages.with..userid.
X..id."
但是,由于我需要 pmml 文件的原始变量名称,我想保留变量名称。有没有办法解决这个问题?
答案 0 :(得分:0)
pmml
包在内部非常不稳定 - 毕竟在R中进行XML操作并不是一个好主意。如果您对将R模型导出为PMML数据格式感兴趣,那么您可以尝试r2pmml
package。它是用Java编写的(因此不会受到R语言怪癖)并且速度更快,功能更强。
r2pmml
包的问题在于它还不支持rpart::rpart
模型类型。因此,您最好的选择如下:
data.frame
列。将变量名称映射列表保存到文本文件中。rpart
包将pmml
模型导出到PMML文件中。org.jpmml.model.visitors.FieldRenamer
)。