簡體   English   中英

如何展平嵌套列表保持內部結構

[英]How to flatten nested list keeping inner structure

假設我有以下列表( result ),這是一個嵌套列表,它從 model 捕獲信息:參數( betas )及其標准錯誤( sd ),另外還有一些關於全局 model ( method )和數量的信息觀察 ( n )。

我想將betassd列表展平,同時區分x1x2的每個值的來源(即它們來自betassd )。

請仔細考慮以下示例:

result<- list(n       = 100,
              method  = "tree", 
              betas   = list(x1 = 1.47,
                             x2 = -2.85),
              sd      = list(x1 = 0.55,
                             x2 = 0.25))

str(result)
# List of 4
# $ n         : num 100
# $ iterations: num 50
# $ betas     :List of 2
# ..$ x1: num 1.47
# ..$ x2: num -2.85
# $ sd        :List of 2
# ..$ x1: num 0.55
# ..$ x2: num 0.25

第一次嘗試: flatten() [Spoiler(:):我失去了每個值的優先級]

## I can't distinguish between betas and sd.
flatten(result)

# $n
# [1] 100
# 
# $iterations
# [1] 50
# 
# $x1
# [1] 1.47
# 
# $x2
# [1] -2.85
# 
# $x1
# [1] 0.55
#
# $x2
# [1] 0.25

第二次嘗試: unlist() [Spoiler(,),我需要一個列表,而不是原子向量]

#I need a list 
unlist(result)

# n iterations   betas.x1   betas.x2      sd.x1      sd.x2 
# 100.00      50.00       1.47      -2.85       0.55       0.25 

所需的 Output。

list(n        = 100,
    method   = "tree", 
    betas.x1 = 1.47,
    betas.x2 = -2.85,
    sd.x1    = 0.55,
    sd.x2    = 0.25)

# List of 6
# $ n       : num 100
# $ method  : chr "tree"
# $ betas.x1: num 1.47
# $ betas.x2: num -2.85
# $ sd.x1   : num 0.55
# $ sd.x2   : num 0.25

as.data.frame將為您展平。 ?as.data.frame

Arrays 通過“展平”第一個維度之后的所有維度並創建合適的列標簽,將具有兩個以上維度的 Arrays 轉換為矩陣。

這在解釋它也在嵌套列表上運行方面做得很差,而不僅僅是 arrays。 (換句話說,我認為文檔沒有在非數組上討論這個特性。)

str(as.data.frame(result))
# 'data.frame': 1 obs. of  6 variables:
#  $ n       : num 100
#  $ method  : chr "tree"
#  $ betas.x1: num 1.47
#  $ betas.x2: num -2.85
#  $ sd.x1   : num 0.55
#  $ sd.x2   : num 0.25

如果您不想要/不需要list ,只需as.list下一個:

str(as.list(as.data.frame(result)))
# List of 6
#  $ n       : num 100
#  $ method  : chr "tree"
#  $ betas.x1: num 1.47
#  $ betas.x2: num -2.85
#  $ sd.x1   : num 0.55
#  $ sd.x2   : num 0.25

暫無
暫無

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

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