[英]How to flatten nested list keeping inner structure
假設我有以下列表( result
),這是一個嵌套列表,它從 model 捕獲信息:參數( betas
)及其標准錯誤( sd
),另外還有一些關於全局 model ( method
)和數量的信息觀察 ( n
)。
我想將betas
和sd
列表展平,同時區分x1
和x2
的每個值的來源(即它們來自betas
或sd
)。
請仔細考慮以下示例:
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
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.