簡體   English   中英

如何從R中的列表列表中提取元素?

[英]How can I extract elements from lists of lists in R?

我有一堆列表,其中包含列表(廣義線性模型輸出)。 我想編寫一個函數,該函數將從每個列表中提取幾個元素,然后將結果合並到一個數據框中。

我想提取modelset[[1]]$likelihoodmodelset[[1]]$fixefmodelset[[2]]$likelihoodmodelset[[2]]$fixef等,然后將結果組合到數據框中。

有人可以告訴我如何執行此操作嗎?

如果我的問題令人困惑,我深表歉意:我想做的事情超出了我有限的編程理解。

有關我的列表的更多信息:

modelset: Large list (16 elements, 7.3Mb)
    :List of 29
    ..$ fixef           : Named num [1:2] -1.236 -0.611
    .. ..- attr(*, "names")= chr [1:2] "(Intercept)" "SMIstd"
    ..$ likelihood      :List of 4
    .. ..$ hlik: num 238
    .. ..$ pvh : num 256
    .. ..$ pbvh: num 260
    .. ..$ cAIC: num 567

    ...etc  

為了優雅地解決此問題,您需要了解可以使用['…']而不是$…來訪問列表元素(但您將獲得列表而不是單個元素)。

因此,如果您想獲得元素likelihoodfixef ,可以編寫:

modelset[[1]][c('likelihood', 'fixef')]

現在,您要對modelset每個元素執行此modelset 那就是lapply所做的:

lapply(modelset, function (x) x[c('likelihood', 'fixef')])

這可行,但不是很像R。

您會發現,在R中,幾乎所有東西都是一個函數。 […]正在調用一個名為[ (但[由於R是R的特殊符號,因此需要在反引號中引用`[` )。 因此,您可以這樣編寫:

lapply(modelset, function (x) `[`(c('likelihood', 'fixef')])

哇,這根本不是很可讀。 但是,我們現在可以刪除包裝的匿名function (x) ,因為在內部我們只是在調用另一個函數,然后將多余的參數移至lapply的最后一個參數:

lapply(modelset, `[`, c('likelihood', 'fixef'))

這行之有效,是優雅的R代碼。


讓我們退后一步,重新檢查我們在這里所做的事情。 實際上,我們有一個看起來像這樣的表達式:

lapply(some_list, function (x) f(x, y))

而且此調用可以改寫為

lapply(some_list, f, y)

我們正是通過somelist = modelsetf = `[`y = c('likelihood', 'fixef')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM