Я не могу получить доступ к третьему списку в списках списков, используя rbind и do.call - PullRequest
0 голосов
/ 08 июня 2019

Я пытаюсь создать фрейм данных с третьим подсписком большого списка.

Чтобы получить нужный мне элемент из одного из списков, я знаю, что могу сделать:

models.all[[2]]$vals[7] 
models.all[[2]]$vals$r

Из ответов на предыдущие вопросы я вижу, что мне нужны do.call и rbind.Но я могу попасть во второй список без ошибок, используя один из этих

do.call(rbind, lapply(models.all, "[[", "vals")) 
do.call(rbind, lapply(models.all, "[[", 1))

, но я не могу понять, как объединить эти два, чтобы получить фрейм данных с 7-м элементом.

Я пробовал несколько вариантов, включая

do.call(rbind, lapply(models.all, "[[", 1, 7))
do.call(rbind, lapply(models.all, "[[", 1, "[[", 7))
do.call(rbind, lapply(models.all, "[[", 1, "[["))
do.call(rbind, lapply(models.all, "[[", "vals", "r"))

Каждый раз, когда я получал одну и ту же ошибку

Ошибка в FUN (X [[i]], ...):неверное количество подписчиков

Вот вывод из dput.

list(A9 = structure(list(vals = structure(list(k = 0, k_se = 0, 
    k_p = 0, n0 = 0, n0_se = 0, n0_p = 0, r = 0, r_se = 0, r_p = 0, 
    sigma = 0, df = 0, t_mid = 0, t_gen = 0, auc_l = 0, auc_e = 0, 
    note = "cannot fit data"), class = "gcvals"), model = "", 
    data = list(t = c(9.48333333333333, 19.4833333333333, 29.4833333333333, 
    39.4833333333333, 49.4833333333333, 59.4833333333333, 69.4833333333333, 
    79.4833333333333, 89.4833333333333, 99.4833333333333, 109.483333333333, 
    119.483333333333, 129.483333333333, 139.483333333333, 149.483333333333, 
    159.483333333333, 169.483333333333, 179.483333333333, 189.483333333333, 
    199.483333333333), N = c(0, 0.001, 0.001, 0.001, 0.001, 0, 
    0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 
    0.001, 0.001, 0.001, 0.001, 0.001))), class = "gcfit"), B9 = structure(list(
    vals = structure(list(k = 0.0343069478456099, k_se = 0.00197994860481234, 
        k_p = 3.07697116191294e-12, n0 = 0.00184248219973248, 
        n0_se = 0.000995533670214006, n0_p = 0.08166151141007, 
        r = 0.0384908359944452, r_se = 0.00805286863068935, r_p = 0.000174150054820571, 
        sigma = 0.00391986600140964, df = 17, t_mid = 74.5380651837677, 
        t_gen = 18.008109272035, auc_l = 4.24452756321697, auc_e = 4.19, 
        note = ""), class = "gcvals"), model = structure(list(
        m = structure(list(resid = function () 
        resid, fitted = function () 
        rhs, formula = function () 
        form, deviance = function () 
        dev, lhs = function () 
        lhs, gradient = function () 
        .swts * attr(rhs, "gradient"), conv = function () 
        {
            if (npar == 0) 
                return(0)
            rr <- qr.qty(QR, resid)
            sqrt(sum(rr[1L:npar]^2)/sum(rr[-(1L:npar)]^2))
        }, incr = function () 
        qr.coef(QR, resid), setVarying = function (vary = rep(TRUE, 
            length(useParams))) 
        {
            assign("useParams", if (is.character(vary)) {
                temp <- logical(length(useParams))
                temp[unlist(ind[vary])] <- TRUE
                temp
            }
            else if (is.logical(vary) && length(vary) != length(useParams)) 
                stop("setVarying : 'vary' length must match length of parameters")
            else {
                vary
            }, envir = thisEnv)
            gradCall[[length(gradCall) - 1L]] <<- useParams
            if (all(useParams)) {
                assign("setPars", setPars.noVarying, envir = thisEnv)
                assign("getPars", getPars.noVarying, envir = thisEnv)
                assign("getRHS", getRHS.noVarying, envir = thisEnv)
                assign("npar", length(useParams), envir = thisEnv)
            }
            else {
                assign("setPars", setPars.varying, envir = thisEnv)
                assign("getPars", getPars.varying, envir = thisEnv)
                assign("getRHS", getRHS.varying, envir = thisEnv)
                assign("npar", length(seq_along(useParams)[useParams]), 
                  envir = thisEnv)
            }
        }, setPars = function (newPars) 
        {
            setPars(newPars)
            assign("resid", .swts * (lhs - assign("rhs", getRHS(), 
                envir = thisEnv)), envir = thisEnv)
            assign("dev", sum(resid^2), envir = thisEnv)
            assign("QR", qr(.swts * attr(rhs, "gradient")), envir = thisEnv)
            return(QR$rank < min(dim(QR$qr)))
        }, getPars = function () 
        getPars(), getAllPars = function () 
        getPars(), getEnv = function () 
        env, trace = function () 
        {
            cat(format(dev), ": ", format(getPars()))
            cat("\n")
        }, Rmat = function () 
        qr.R(QR), predict = function (newdata = list(), qr = FALSE) 
        eval(form[[3L]], as.list(newdata), env)), class = "nlsModel"), 
        convInfo = list(isConv = TRUE, finIter = 8L, finTol = 1.49011611938477e-08, 
            stopCode = 1L, stopMessage = "Relative error in the sum of squares is at most `ftol'."), 
        data = d, call = minpack.lm::nlsLM(formula = n ~ k/(1 + 
            ((k - n0)/n0) * exp(-r * t)), data = d, start = list(k = k_init, 
            n0 = n0_init, r = r_init), control = list(maxiter = 50, 
            tol = 1e-05, minFactor = 0.0009765625, printEval = FALSE, 
            warnOnly = FALSE), lower = c(0.024, 0, 0), upper = c(Inf, 
        0.034, Inf), algorithm = "LM", trace = FALSE), control = list(
            maxiter = 500)), class = "nls"), data = list(t = c(9.48333333333333, 
    19.4833333333333, 29.4833333333333, 39.4833333333333, 49.4833333333333, 
    59.4833333333333, 69.4833333333333, 79.4833333333333, 89.4833333333333, 
    99.4833333333333, 109.483333333333, 119.483333333333, 129.483333333333, 
    139.483333333333, 149.483333333333, 159.483333333333, 169.483333333333, 
    179.483333333333, 189.483333333333, 199.483333333333), N = c(0, 
    0.001, 0.001, 0.001, 0.018, 0.018, 0.018, 0.018, 0.018, 0.018, 
    0.031, 0.031, 0.03, 0.031, 0.033, 0.033, 0.034, 0.034, 0.034, 
    0.034))), class = "gcfit"), C9 = structure(list(vals = structure(list(
    k = 1.56005616879257e-08, k_se = 0.000267823460628273, k_p = 0.999954201773199, 
    n0 = 0.001, n0_se = 0.0119313415839017, n0_p = 0.934184265313822, 
    r = 2.04360384279965e-06, r_se = 0.0350892668938123, r_p = 0.99995420907025, 
    sigma = 0.000315793167291782, df = 17, t_mid = -7.63390783048183, 
    t_gen = 339178.839872586, auc_l = 0.0251984856527735, auc_e = 0.02, 
    note = "questionable fit (k < n0)"), class = "gcvals"), model = structure(list(
    m = structure(list(resid = function () 
    resid, fitted = function () 
    rhs, formula = function () 
    form, deviance = function () 
    dev, lhs = function () 
    lhs, gradient = function () 
    .swts * attr(rhs, "gradient"), conv = function () 
    {
        if (npar == 0) 
            return(0)
        rr <- qr.qty(QR, resid)
        sqrt(sum(rr[1L:npar]^2)/sum(rr[-(1L:npar)]^2))
    }, incr = function () 
    qr.coef(QR, resid), setVarying = function (vary = rep(TRUE, 
        length(useParams))) 
    {
        assign("useParams", if (is.character(vary)) {
            temp <- logical(length(useParams))
            temp[unlist(ind[vary])] <- TRUE
            temp
        }
        else if (is.logical(vary) && length(vary) != length(useParams)) 
            stop("setVarying : 'vary' length must match length of parameters")
        else {
            vary
        }, envir = thisEnv)
        gradCall[[length(gradCall) - 1L]] <<- useParams
        if (all(useParams)) {
            assign("setPars", setPars.noVarying, envir = thisEnv)
            assign("getPars", getPars.noVarying, envir = thisEnv)
            assign("getRHS", getRHS.noVarying, envir = thisEnv)
            assign("npar", length(useParams), envir = thisEnv)
        }
        else {
            assign("setPars", setPars.varying, envir = thisEnv)
            assign("getPars", getPars.varying, envir = thisEnv)
            assign("getRHS", getRHS.varying, envir = thisEnv)
            assign("npar", length(seq_along(useParams)[useParams]), 
                envir = thisEnv)
        }
    }, setPars = function (newPars) 
    {
        setPars(newPars)
        assign("resid", .swts * (lhs - assign("rhs", getRHS(), 
            envir = thisEnv)), envir = thisEnv)
        assign("dev", sum(resid^2), envir = thisEnv)
        assign("QR", qr(.swts * attr(rhs, "gradient")), envir = thisEnv)
        return(QR$rank < min(dim(QR$qr)))
    }, getPars = function () 
    getPars(), getAllPars = function () 
    getPars(), getEnv = function () 
    env, trace = function () 
    {
        cat(format(dev), ": ", format(getPars()))
        cat("\n")
    }, Rmat = function () 
    qr.R(QR), predict = function (newdata = list(), qr = FALSE) 
    eval(form[[3L]], as.list(newdata), env)), class = "nlsModel"), 
    convInfo = list(isConv = TRUE, finIter = 21L, finTol = 1.49011611938477e-08, 
        stopCode = 1L, stopMessage = "Relative error in the sum of squares is at most `ftol'."), 
    data = d, call = minpack.lm::nlsLM(formula = n ~ k/(1 + ((k - 
        n0)/n0) * exp(-r * t)), data = d, start = list(k = k_init, 
        n0 = n0_init, r = r_init), control = list(maxiter = 50, 
        tol = 1e-05, minFactor = 0.0009765625, printEval = FALSE, 
        warnOnly = FALSE), lower = c(0, 0, 0), upper = c(Inf, 
    0.001, Inf), algorithm = "LM", trace = FALSE), control = list(
        maxiter = 500)), class = "nls"), data = list(t = c(9.48333333333333, 
19.4833333333333, 29.4833333333333, 39.4833333333333, 49.4833333333333, 
59.4833333333333, 69.4833333333333, 79.4833333333333, 89.4833333333333, 
99.4833333333333, 109.483333333333, 119.483333333333, 129.483333333333, 
139.483333333333, 149.483333333333, 159.483333333333, 169.483333333333, 
179.483333333333, 189.483333333333, 199.483333333333), N = c(0, 
0, 0.001, 0.001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0))), class = "gcfit"), D9 = structure(list(vals = structure(list(
    k = 4.55583049264384e-08, k_se = 0.000277246122577439, k_p = 0.999870801009608, 
    n0 = 0.001, n0_se = 0.00152884345042508, n0_p = 0.521805194883514, 
    r = 1.46931632834423e-06, r_se = 0.00894288466502114, r_p = 0.999870820166912, 
    sigma = 0.000329723319096796, df = 17, t_mid = -31.0071710623543, 
    t_gen = 471748.096164597, auc_l = 0.0622032384887612, auc_e = 0.045, 
    note = "questionable fit (k < n0)"), class = "gcvals"), model = structure(list(
    m = structure(list(resid = function () 
    resid, fitted = function () 
    rhs, formula = function () 
    form, deviance = function () 
    dev, lhs = function () 
    lhs, gradient = function () 
    .swts * attr(rhs, "gradient"), conv = function () 
    {
        if (npar == 0) 
            return(0)
        rr <- qr.qty(QR, resid)
        sqrt(sum(rr[1L:npar]^2)/sum(rr[-(1L:npar)]^2))
    }, incr = function () 
    qr.coef(QR, resid), setVarying = function (vary = rep(TRUE, 
        length(useParams))) 
    {
        assign("useParams", if (is.character(vary)) {
            temp <- logical(length(useParams))
            temp[unlist(ind[vary])] <- TRUE
            temp
        }
        else if (is.logical(vary) && length(vary) != length(useParams)) 
            stop("setVarying : 'vary' length must match length of parameters")
        else {
            vary
        }, envir = thisEnv)
        gradCall[[length(gradCall) - 1L]] <<- useParams
        if (all(useParams)) {
            assign("setPars", setPars.noVarying, envir = thisEnv)
            assign("getPars", getPars.noVarying, envir = thisEnv)
            assign("getRHS", getRHS.noVarying, envir = thisEnv)
            assign("npar", length(useParams), envir = thisEnv)
        }
        else {
            assign("setPars", setPars.varying, envir = thisEnv)
            assign("getPars", getPars.varying, envir = thisEnv)
            assign("getRHS", getRHS.varying, envir = thisEnv)
            assign("npar", length(seq_along(useParams)[useParams]), 
                envir = thisEnv)
        }
    }, setPars = function (newPars) 
    {
        setPars(newPars)
        assign("resid", .swts * (lhs - assign("rhs", getRHS(), 
            envir = thisEnv)), envir = thisEnv)
        assign("dev", sum(resid^2), envir = thisEnv)
        assign("QR", qr(.swts * attr(rhs, "gradient")), envir = thisEnv)
        return(QR$rank < min(dim(QR$qr)))
    }, getPars = function () 
    getPars(), getAllPars = function () 
    getPars(), getEnv = function () 
    env, trace = function () 
    {
        cat(format(dev), ": ", format(getPars()))
        cat("\n")
    }, Rmat = function () 
    qr.R(QR), predict = function (newdata = list(), qr = FALSE) 
    eval(form[[3L]], as.list(newdata), env)), class = "nlsModel"), 
    convInfo = list(isConv = TRUE, finIter = 30L, finTol = 1.49011611938477e-08, 
        stopCode = 1L, stopMessage = "Relative error in the sum of squares is at most `ftol'."), 
    data = d, call = minpack.lm::nlsLM(formula = n ~ k/(1 + ((k - 
        n0)/n0) * exp(-r * t)), data = d, start = list(k = k_init, 
        n0 = n0_init, r = r_init), control = list(maxiter = 50, 
        tol = 1e-05, minFactor = 0.0009765625, printEval = FALSE, 
        warnOnly = FALSE), lower = c(0, 0, 0), upper = c(Inf, 
    0.001, Inf), algorithm = "LM", trace = FALSE), control = list(
        maxiter = 500)), class = "nls"), data = list(t = c(9.48333333333333, 
19.4833333333333, 29.4833333333333, 39.4833333333333, 49.4833333333333, 
59.4833333333333, 69.4833333333333, 79.4833333333333, 89.4833333333333, 
99.4833333333333, 109.483333333333, 119.483333333333, 129.483333333333, 
139.483333333333, 149.483333333333, 159.483333333333, 169.483333333333, 
179.483333333333, 189.483333333333, 199.483333333333), N = c(0.001, 
0.001, 0.001, 0.001, 0.001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0))), class = "gcfit"), E9 = structure(list(vals = structure(list(
    k = 0.00709656710945647, k_se = 0.00125732532879861, k_p = 2.91500167017902e-05, 
    n0 = 3.13585459517717e-08, n0_se = 9.62968275223491e-07, 
    n0_p = 0.974401193461251, r = 0.243673731170318, r_se = 0.611004339832665, 
    r_p = 0.694999133822334, sigma = 0.00466720033879414, df = 17, 
    t_mid = 50.5989316667061, t_gen = 2.84457080059837, auc_l = 1.05656801928755, 
    auc_e = 1.07, note = ""), class = "gcvals"), model = structure(list(
    m = structure(list(resid = function () 
    resid, fitted = function () 
    rhs, formula = function () 
    form, deviance = function () 
    dev, lhs = function () 
    lhs, gradient = function () 
    .swts * attr(rhs, "gradient"), conv = function () 
    {
        if (npar == 0) 
            return(0)
        rr <- qr.qty(QR, resid)
        sqrt(sum(rr[1L:npar]^2)/sum(rr[-(1L:npar)]^2))
    }, incr = function () 
    qr.coef(QR, resid), setVarying = function (vary = rep(TRUE, 
        length(useParams))) 
    {
        assign("useParams", if (is.character(vary)) {
            temp <- logical(length(useParams))
            temp[unlist(ind[vary])] <- TRUE
            temp
        }
        else if (is.logical(vary) && length(vary) != length(useParams)) 
            stop("setVarying : 'vary' length must match length of parameters")
        else {
            vary
        }, envir = thisEnv)
        gradCall[[length(gradCall) - 1L]] <<- useParams
        if (all(useParams)) {
            assign("setPars", setPars.noVarying, envir = thisEnv)
            assign("getPars", getPars.noVarying, envir = thisEnv)
            assign("getRHS", getRHS.noVarying, envir = thisEnv)
            assign("npar", length(useParams), envir = thisEnv)
        }
        else {
            assign("setPars", setPars.varying, envir = thisEnv)
            assign("getPars", getPars.varying, envir = thisEnv)
            assign("getRHS", getRHS.varying, envir = thisEnv)
            assign("npar", length(seq_along(useParams)[useParams]), 
                envir = thisEnv)
        }
    }, setPars = function (newPars) 
    {
        setPars(newPars)
        assign("resid", .swts * (lhs - assign("rhs", getRHS(), 
            envir = thisEnv)), envir = thisEnv)
        assign("dev", sum(resid^2), envir = thisEnv)
        assign("QR", qr(.swts * attr(rhs, "gradient")), envir = thisEnv)
        return(QR$rank < min(dim(QR$qr)))
    }, getPars = function () 
    getPars(), getAllPars = function () 
    getPars(), getEnv = function () 
    env, trace = function () 
    {
        cat(format(dev), ": ", format(getPars()))
        cat("\n")
    }, Rmat = function () 
    qr.R(QR), predict = function (newdata = list(), qr = FALSE) 
    eval(form[[3L]], as.list(newdata), env)), class = "nlsModel"), 
    convInfo = list(isConv = FALSE, finIter = 97L, finTol = 1.49011611938477e-08, 
        stopCode = 5L, stopMessage = "Number of calls to `fcn' has reached or exceeded `maxfev' == 400."), 
    data = d, call = minpack.lm::nlsLM(formula = n ~ k/(1 + ((k - 
        n0)/n0) * exp(-r * t)), data = d, start = list(k = k_init, 
        n0 = n0_init, r = r_init), control = list(maxiter = 50, 
        tol = 1e-05, minFactor = 0.0009765625, printEval = FALSE, 
        warnOnly = FALSE), lower = c(0.004, 0, 0), upper = c(Inf, 
    0.015, Inf), algorithm = "LM", trace = FALSE), control = list(
        maxiter = 500)), class = "nls"), data = list(t = c(9.48333333333333, 
19.4833333333333, 29.4833333333333, 39.4833333333333, 49.4833333333333, 
59.4833333333333, 69.4833333333333, 79.4833333333333, 89.4833333333333, 
99.4833333333333, 109.483333333333, 119.483333333333, 129.483333333333, 
139.483333333333, 149.483333333333, 159.483333333333, 169.483333333333, 
179.483333333333, 189.483333333333, 199.483333333333), N = c(0.001, 
0, 0, 0, 0, 0.015, 0.014, 0.013, 0.004, 0.00700000000000001, 
0.004, 0.004, 0.00800000000000001, 0.011, 0.001, 0.00800000000000001, 
0.013, 0, 0.003, 0.003))), class = "gcfit"))
...