将参数作为R中的列表馈入函数

时间:2018-11-29 19:34:08

标签: r spline smoothing

我想比较不同的模型,为了节省时间,我想知道是否可以为函数中的单个参数输入值列表,并可能绘制结果。

我的具体示例-我对平滑样条曲线感兴趣,因此模型为:

public class Main {

    private static List<String> values = new ArrayList();

    public static void main(String[] args) {
        try {
            JSONObject jsonObject = new JSONObject(new String(Files.readAllBytes(Paths.get("test.json"))));

            findValues(jsonObject);

            values.forEach(System.out::println);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static void findValues(Object root) {

        if (root instanceof JSONObject) {
            Iterator<String> keys = ((JSONObject)root).keys();

            while (keys.hasNext()) {
                String key = keys.next();

                if ("pieceLabel".equals(key)) {
                    values.add(((JSONObject)root).getString(key));
                }
                else {
                    Object o = ((JSONObject)root).get(key);
                    findValues(o);
                }
            }
        }
        else if (root instanceof JSONArray) {
            for (Object o : (JSONArray)root) {
                findValues(o);
            }
        }
    }
}

这很好,但是如何通过“ df”选择不同的拟合呢?

2 个答案:

答案 0 :(得分:0)

丑陋,但您可以循环播放

fits_out <- list()
for(i in 1:50){
fits[[i]] <- smooth.splines( x=train_x, y=train_y, df=i )
}

然后,您可以从列表对象中访问每个适合的模型

答案 1 :(得分:0)

我不确定您要做什么,但是如果您只想创建具有不同自由度的样条曲线,则需要对其进行迭代,smooth.spline不会在其df中进行矢量化处理参数:

fits = lapply(seq(2, 20, by = 0.5), smooth.spline, x = train_x, y = train_y, w = NULL)

这样称呼,lapply将改变df参数;您还可以更明确地编写它:

fits = lapply(
    seq(2, 20, by = 0.5),
    function (df) smooth.spline(x = train_x, y = train_y, df = df)
)