当我尝试从nls()结果中提取变量时,为什么R告诉我“无效的下标类型'列表'”?

时间:2019-01-24 21:43:48

标签: r lapply

transgression2是一个list,其中存储了50000个nls运行的所有nls结果。我正在尝试从中提取系数。

进行transgression2[[1]]$m$getAllPars()会返回一个已命名的号码列表。

nlsCoefficients <- lapply(transgression2, function(x) (transgression2[[x]]$m$getAllPars()))

1 个答案:

答案 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说的那样-您正在尝试使用列表下标