Разобрать файл YAML, используя его содержимое
У меня есть файл YAML с именем JJ_model.yaml, содержимое которого указано ниже:
author : JJ
train_data_source : clean_train.csv
test_data_source : clean_test.csv
model_type : RF
RF:
n_estimators : 10
criterion : 'gini'
max_features : 'auto'
max_depth : 2
n_jobs : 1
SVM:
kernel : 'rbf'
degree : 3
gamma : 'auto'
tol : 0.001
model_type
поле RF
в этом случае. Я хочу забрать содержимое этого файла YAML, используя R
yaml
пакет и, в частности, подобрать параметры для RF
в этом случае в отличие от SVM
,
Я попытался сделать следующее, но не могу заставить его работать:
# read in and parse the yaml file
parsed_model_yaml <- yaml::yaml.load_file(input = file.path(wd_model_spec
, "JJ"
, "JJ_model.yaml"))
# This explicit reference works
test <- parsed_model_yaml$RF$n_estimators
# This throws an error '$ operator is invalid for atomic vectors'
test_meta_parse <- parsed_model_yaml$model_type$`parse(parsed_model_yaml$model_type)``
Может ли кто-нибудь объяснить, как получить model_type
без явного перехода в RF
ссылка явно, но получить его из содержимого YAML?
1 ответ
Еще один случай fortune(312)
Проблема здесь в том, что нотация $ является магическим ярлыком и, как и любая другая магия, при неправильном использовании может сделать программный эквивалент превращения себя в жабу. - Грег Сноу (в ответ на пользователя, который хотел получить доступ к столбцу, имя которого хранится в y с помощью x$y, а не x[[y]]]) R-help (февраль 2012 г.)
использование [[
не $
где вам нужно:
parsed_model_yaml[[parsed_model_yaml$model_type]]$n_estimators
или сделать вспомогательную функцию
estimators <- function(l) l[[l[['model_type']]]][['n_estimators']]
estimators(parsed_model_yaml)
# 10
(Возможно, вы захотите создать класс объекта для хранения ваших данных и некоторых стандартных функций экстрактора....)