transgression2
是一个list
,其中存储了50000个nls运行的所有nls结果。我正在尝试从中提取系数。
进行transgression2[[1]]$m$getAllPars()
会返回一个已命名的号码列表。
nlsCoefficients <- lapply(transgression2, function(x) (transgression2[[x]]$m$getAllPars()))
答案 0 :(得分:1)
这不是lapply
的工作方式。
我们将一个函数应用于列表中的每个元素-看起来您期望x
是每个子列表的数字索引,而lapply
本身会传递子列表。
让我们制作一个看起来像您的假对象-在这种情况下,我们存储5和10作为值,而不是函数:
transgression2 <- list(list('m' = list('getAllPars' = 5)), list('m' = list('getAllPars' = 10)))
我们需要对transgression2进行应用,但是该函数将应用于其内部的每个部分,就像这样:
lapply(transgression2, function(x) x$m$getAllPars)
[[1]]
[1] 5
[[2]]
[1] 10
您可以在这里看到不同之处:对于每个索引,我们最多lapply
到transgression2的长度,但使用的功能与您最初使用的功能相同:
lapply(1:length(transgression2), function(x) transgression2[[x]]$m$getAllPars)
[[1]]
[1] 5
[[2]]
[1] 10
最初的错误是因为您尝试通过其子列表对列表进行子集化:R将您的呼叫解释为:
transgression2[[transgression2[[1]]]]
或
transgression2[[list('m' = list('getAllPars' = 5))]]
像R说的那样-您正在尝试使用列表下标