2017-02-07 11 views
0

У меня есть кадр данных. Много переменных имеют имена, как это:R Имя переменной Содержит точку с запятой

/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 файла, я хочу держите имена переменных такими, какие они есть. Есть ли способ решить эту проблему?

ответ

0

Пакет pmml довольно шаткий внутри - это не такая хорошая идея, чтобы делать манипуляции с XML в R в конце концов. Если вы заинтересованы в экспорте R-моделей в формат данных PMML, вы можете попробовать попробовать r2pmml package. Он написан на Java (следовательно, он не страдает от особенностей языка R) и намного быстрее и функциональнее.

Проблема с пакетом r2pmml заключается в том, что он еще не поддерживает тип модели rpart::rpart. Таким образом, ваш лучший вариант выглядит следующим образом:

  1. Переименовать data.frame столбцов. Сохраните список сопоставлений имен переменных в текстовый файл.
  2. Экспортируйте модель rpart в файл PMML с помощью пакета pmml.
  3. Откройте файл PMML с помощью JPMML-Model library и восстановите исходные имена переменных (на основе вышеуказанного файла сопоставлений). JPMML-Model предоставляет для этого специальный API (класс посетителя org.jpmml.model.visitors.FieldRenamer).

 Смежные вопросы

  • Нет связанных вопросов^_^