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
模型类型。因此,您的最佳选择似乎如下:
- 重命名
data.frame
列。将变量名称映射列表保存到文本文件中。
- 使用
pmml
包将 rpart
模型导出到 PMML 文件。
- 使用JPMML-Model library打开PMML文件并恢复原始变量名(基于上述映射文件)。 JPMML-Model 为此提供了特殊的 API(访客 class
org.jpmml.model.visitors.FieldRenamer
)。
我有一个数据框。许多变量的名称如下:
/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
模型类型。因此,您的最佳选择似乎如下:
- 重命名
data.frame
列。将变量名称映射列表保存到文本文件中。 - 使用
pmml
包将rpart
模型导出到 PMML 文件。 - 使用JPMML-Model library打开PMML文件并恢复原始变量名(基于上述映射文件)。 JPMML-Model 为此提供了特殊的 API(访客 class
org.jpmml.model.visitors.FieldRenamer
)。