如何用dplyr新函数替代do创建R的plotly对象数据框?
替代dplyr弃用
do()函数的两种方案 针对你需要生成包含plotly对象的数据框的需求,这里提供两种基于dplyr新函数的替代方案:
方法1:使用summarise()
利用summarise()支持生成列表列的特性,直接对分组数据应用绘图函数:
library(plotly) library(tidyverse) # 定义绘图函数(改写为常规函数更清晰) plots <- function(data) { plot_ly(data, x = ~Sepal.Length, y = ~Petal.Length) %>% add_markers() } # 用summarise替代do生成含plotly对象的数据框 df_plotly <- iris %>% group_by(Species) %>% summarise( plotly_objects = list(plots(cur_data())), .groups = "drop" # 可选:取消分组状态 )
cur_data()用于获取当前分组的数据集- 用
list()包裹绘图结果,确保summarise()生成列表列,每个元素对应一个plotly对象
方法2:使用nest_by() + mutate()
先嵌套分组数据,再逐行生成plotly对象:
library(plotly) library(tidyverse) plots <- function(data) { plot_ly(data, x = ~Sepal.Length, y = ~Petal.Length) %>% add_markers() } # 嵌套分组数据后生成plotly对象 df_plotly <- iris %>% nest_by(Species) %>% # 按Species嵌套,生成包含子数据框的data列 mutate(plotly_objects = plots(data)) %>% # 对每个子数据框生成plotly图 ungroup() # 取消行级分组状态
两种方法最终生成的df_plotly结构完全一致:包含Species分类列和plotly_objects列表列,每个列表元素都是对应物种的交互式散点图。
内容的提问来源于stack exchange,提问作者Basil
相关产品推荐
相关产品推荐

