将递归列表转换为R中的动态data.frame

时间:2015-05-08 07:45:28

标签: r recursion dataframe nested-lists

我需要构建一个递归遍历列表和子列表然后转换为data.frame的函数。我们说我有一个类似的列表

from <- list(id="12345678", name="Gabriele")
message <- "The quick fox"
comments <- list(list(name="Mickey", comment="Hello world!"), list(name="Donald", message="World...hello!"))

big.list <- list(from, message, comments)

我需要使用此架构

以data.frame的形式转换它
from_id, from_name, message, comments_name, comments_message

(换句话说,扁平化子列表)

问题在于我事先并不知道我在列表中有哪些字段以及哪些字段我没有(例如,某些帖子可能完全错过评论部分)。

1 个答案:

答案 0 :(得分:1)

以下是快速试用版。如果mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { refreshPartially(position); } }); 具有名称,则可将其视为列名。

内部big.list展平子列表,而外部列表转换为数据框。

do.call()

@ Gabriele B

下面是笨拙但有效的解决方案。其他人可能会发布一个更好的。

lst1 <- list(from = list(id="12345678", name="Gabriele"),message = "The quick fox",
             comments = list(list(name="Mickey", comment="Hello world!"),
                            list(name="Donald", message="World...hello!")))
lst2 <- list(from = list(id="12345678", name="Gabriele"),message = "The quick fox",
             comments = list(list(name="Mickey", comment="Hello world!")))
lst3 <- list(from = list(id="12345678", name="Gabriele"),message = "The quick fox")

df1 <- do.call(data.frame, do.call(c, lst1))
df2 <- do.call(data.frame, do.call(c, lst2))
df3 <- do.call(data.frame, do.call(c, lst3))

df1
#from.id from.name       message comments1.name comments1.comment comments2.name comments2.message
#1 12345678  Gabriele The quick fox         Mickey      Hello world!         Donald    World...hello!

df2
#from.id from.name       message comments.name comments.comment
#1 12345678  Gabriele The quick fox        Mickey     Hello world!

df3
#from.id from.name       message
#1 12345678  Gabriele The quick fox