我正在寻找一种方法来可靠地将列表结构强制为data.frame
or tibble
同时维护一列或多列作为列表列。考虑以下列表结构:
d = data.frame(x = 1:10, y = 1.5*(1:10) + rnorm(10))
ex = list(label = "A", number = 1L, model = lm(y ~ x, data = d))
这不能按预期工作:
lapply(ex, as_data_frame) %>% bind_rows()
因为lm
“模型”列中的对象在转换中被矢量化。然而,将模型包装在list
得到预期的结果:
ex2 = list(label = "A", number = 1L, model = list(lm(y ~ x, data = d)))
as_data_frame(ex2)
不幸的是,我有一个用例,我事先不知道给定的列是否是列表。我正在使用一个输出类似以下内容的函数:
ex3 = list(
list(label = "A", number = 1L, model = lm(y ~ x, data = d)),
list(label = "B", number = 1L, model = lm(y ~ x + 0, data = d))
)
# won't work properly
lapply(ex3, as_data_frame) %>% bind_rows()
有没有办法预防data_frame
从将对象向量化为tibble
?如果没有,我可以使用什么替代方法?