使用其内容解析YAML文件

时间:2016-03-18 05:38:26

标签: r yaml

我有一个名为JJ_model.yaml的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。我想使用R yaml包来获取此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引用但是从YAML内容中获取它的情况下获取RF

1 个答案:

答案 0 :(得分:0)

[[

的另一个案例
  

这里的问题是$符号是一个神奇的快捷方式,就像任何其他魔法一样,如果使用不正确可能会编程   相当于把自己变成了蟾蜍。       - Greg Snow(响应想要访问名称通过x $ y而不是x [[y]]存储在y中的列的用户)         R-help(2012年2月)

在您需要的地方使用$而不是parsed_model_yaml[[parsed_model_yaml$model_type]]$n_estimators

estimators <- function(l) l[[l[['model_type']]]][['n_estimators']]

estimators(parsed_model_yaml)

# 10

或制作辅助功能

                <input readonly="readonly" type="hidden" name="tid" id="tid" value=""/>



            <!-- <tr>
                <td>Order Id    :</td><td><input type="text" name="order_id" value="123654789"/></td>
            </tr> -->
            <tr>
                <td>Amount  :</td><td><input type="readonly" id="amount" name="amount" value="6000.00"/></td>
            </tr>
            <tr>
                <td>Currency    :</td><td><input type="readonly" name="currency" value="INR"/></td>
            </tr>
              <tr>
    <input type="hidden" name="redirect_url" value="http://api.jeenees.com/ccavResponseHandler"/>
            <input type="hidden" name="cancel_url" value="http://api.jeenees.com/ccavResponseHandler"/>

                <input type="hidden" name="language" value="EN"/>

         <tr>
            <td>Billing Name</td>
            <td><input type="text" name="billing_name" value="Peter" /></td>
        </tr>
        <tr>
            <td>Billing Address:</td>
            <td><input type="text" name="billing_address"
                value="Santacruz" /></td>
        </tr>
        <tr>
            <td>Billing City:</td>
            <td><input type="text" name="billing_city" value="Mumbai" /></td>
        </tr>
        <tr>
            <td>Billing State:</td>
            <td><input type="text" name="billing_state" value="MH" /></td>
        </tr>
        <tr>
            <td>Billing Zip:</td>
            <td><input type="text" name="billing_zip" value="400054" /></td>
        </tr>
        <tr>
            <td>Billing Country:</td>
            <td><input type="text" name="billing_country" value="India" />
            </td>
        </tr>
        <tr>
            <td>Billing Tel:</td>
            <td><input type="text" name="billing_tel" value="9718165631" />
            </td>
        </tr>
        <tr>
            <td>Billing Email:</td>
            <td><input type="text" name="billing_email"
                value="testing@domain.com" /></td>

(看起来你可能想要创建一个对象类来保存你的数据和一些标准的提取器函数....)