如何在R的dataframe中存储ggplot对象?附报错解决方案
问题原因与修复方案
为什么嵌套数据集没这个问题?
嵌套数据集里的plots列是列表列(list-column),每个元素可以是任意类型的对象(包括ggplot)。而直接用mutate(plots = empty_plots)时,dplyr会把empty_plots当成单个标量,试图将其转换成和数据框行数匹配的向量,但ggplot对象不属于向量类型,因此触发报错。
修复方法
以下三种方式都能解决问题,生成符合需求的数据集:
方法1:用rep()生成匹配行数的列表
把单个ggplot对象包装成列表,再重复到数据框的行数:
test_data_with_plots <- test_data %>% mutate(plots = rep(list(empty_plots), nrow(test_data)))
方法2:使用rowwise()逐行赋值
让dplyr逐行处理,为每行单独赋值一个ggplot对象:
test_data_with_plots <- test_data %>% rowwise() %>% mutate(plots = list(empty_plots)) %>% ungroup()
方法3:用purrr::map()生成列表列
借助purrr的map函数,为每行生成一个ggplot对象:
library(purrr) test_data_with_plots <- test_data %>% mutate(plots = map(seq_len(n()), ~empty_plots))
以上方法最终都会生成包含x、y、plots列的数据框,其中plots是存储ggplot对象的列表列,和你之前的嵌套数据集结构一致。
内容的提问来源于stack exchange,提问作者J.Sabree
相关产品推荐
相关产品推荐

