You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 18:45:22