我需要构建一个递归遍历列表和子列表然后转换为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
(换句话说,扁平化子列表)
问题在于我事先并不知道我在列表中有哪些字段以及哪些字段我没有(例如,某些帖子可能完全错过评论部分)。
答案 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