如何正确生成tibble列表并合并为单个大型tibble?
问题解决:合并多次调用函数返回的tibble
你的代码报错核心原因是列表赋值方式错误:用tibbles[i] = mytibble时,R会把tibble拆成对应每一列的元素塞进列表,导致最终列表里的元素不是完整的tibble,而是单个列向量,bind_rows自然无法识别。
下面是几种可行的解决方法:
方法1:用双括号给列表赋值
修改循环里的赋值语句,用双括号[[i]]把完整的tibble作为单个元素存入列表:
tibbles = list() for (i in 1:10) { mytibble = tibble(x=rnorm(10), y=sample(LETTERS, 10), z=i) tibbles[[i]] = mytibble # 替换为双括号赋值 } data = bind_rows(tibbles)
方法2:用append添加元素
每次把tibble包装成列表元素,再用append添加到列表中:
tibbles = list() for (i in 1:10) { mytibble = tibble(x=rnorm(10), y=sample(LETTERS, 10), z=i) tibbles = append(tibbles, list(mytibble)) # 将tibble放入list后再添加 } data = bind_rows(tibbles)
方法3:用purrr的函数式写法(更简洁)
如果习惯tidyverse工具链,直接用map_dfr,它会自动把每次函数调用的结果合并成一个大tibble,省去手动管理列表的步骤:
library(purrr) # 匿名函数写法 data = map_dfr(1:10, function(i) { tibble(x=rnorm(10), y=sample(LETTERS, 10), z=i) }) # 更简洁的公式写法 data = map_dfr(1:10, ~tibble(x=rnorm(10), y=sample(LETTERS, 10), z=.x))
内容的提问来源于stack exchange,提问作者sharoz
相关产品推荐
相关产品推荐

