R 变量名称包含分号

R Variable Name Contains Semicolon

我有一个数据框。许多变量的名称如下:

/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")

但是,这会导致以下错误:

Error in field$class[[field$name[i]]] : subscript out of bounds

我认为原因是,变量名包含 :,因此列索引被搞乱了。

我本可以用 check.names = T 读取数据,这样变量名称就会像这样:

X.messages.with..userid.   
X..id."

但是,因为我需要 pmml 文件的原始变量名,所以我想保持变量名不变。有什么办法可以解决这个问题吗?

pmml 包在内部非常不稳定 - 毕竟在 R 中进行 XML 操作并不是一个好主意。如果您对将 R 模型导出为 PMML 数据格式感兴趣,那么您可以尝试 r2pmml package。它是用 Java 编写的(因此不会受到 R 语言怪癖的影响)并且速度更快,功能更强大。

r2pmml 包的问题在于它还不支持 rpart::rpart 模型类型。因此,您的最佳选择似乎如下:

  1. 重命名 data.frame 列。将变量名称映射列表保存到文本文件中。
  2. 使用 pmml 包将 rpart 模型导出到 PMML 文件。
  3. 使用JPMML-Model library打开PMML文件并恢复原始变量名(基于上述映射文件)。 JPMML-Model 为此提供了特殊的 API(访客 class org.jpmml.model.visitors.FieldRenamer)。