2015-01-05 7 views
0

Есть ли простой способ сгладить список списков при конкатенации. Мой вопрос, вероятно, лучше всего объясняется примером.сгладить список при конкатенации

Когда я выполняю следующий код.

> a <- c(list(list(a=1,b=2), list(a=3,b=4)), list(a=5,b=6)) 
> print(a) 

[[1]] 
[[1]]$a 
[1] 1 

[[1]]$b 
[1] 2 


[[2]] 
[[2]]$a 
[1] 3 

[[2]]$b 
[1] 4 


$a 
[1] 5 

$b 
[1] 6 

Я хотел бы получить такой же результат, как если бы я сделал это.

> a <- c(list(a=1,b=2), list(a=3,b=4), list(a=5,b=6)) 
> print(a) 
$a 
[1] 1 

$b 
[1] 2 

$a 
[1] 3 

$b 
[1] 4 

$a 
[1] 5 

$b 
[1] 6 
+0

Вы действительно хотите дублированные имена? – A5C1D2H2I1M1N2O1R2T1

+0

Я думаю, что lapply должен работать. –

ответ

4

Я думаю, вы могли бы использовать unlist или rapply, но я бы опасаться чего-либо с дублированными именами:

as.list(unlist(a)) 
# $a 
# [1] 1 
# 
# $b 
# [1] 2 
# 
# $a 
# [1] 3 
# 
# $b 
# [1] 4 
# 
# $a 
# [1] 5 
# 
# $b 
# [1] 6 

as.list(rapply(a, unlist)) также должны работать - не уверен, если есть преимущество к использованию этого или нет ....


A (возможно) лучшая идея будет t o Посмотрите на это LinearizeNestedList function Я столкнулся, что позволит вам сгладить список, но назначает имена, чтобы вы могли определить, где они были бы в первую очередь.

После его загрузки в вашем рабочем пространстве, использование было бы просто:

LinearizeNestedList(a) 
+0

@ Анандо Махто, это очень полезно. Жаль, что раньше я не знал о функции LinearizeNestedList. – Lukasz

Смежные вопросы