我正在尝试使用大型列表的第三个子列表制作一个数据框。
要从列表之一中获取所需的元素,我知道我可以做到:
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"))