为何在数据处理管道末尾直接调用gt()会将DataFrame转为列表?
关于gt表格在管道末尾直接调用不显示的问题
问题现象
使用gt包生成表格时出现如下差异:
- 直接在数据处理管道末尾调用
gt()并赋值给变量,表格不会在RStudio查看器中显示,且变量存储的gt对象在控制台打印时呈现为列表形式 - 先将处理后的数据存入变量,再单独执行
变量 %>% gt(),表格能正常在查看器显示
无法正常显示的代码
library(nflfastR) library(gt) library(tidyverse) pbp_rp <- load_pbp(2023) %>% drop_na(yards_gained) %>% filter(rush == 1 | pass == 1, !is.na(yards_gained)) %>% select(posteam, yards_gained, week) %>% group_by(posteam) %>% summarise(att = sum(!is.na(yards_gained)), lost_att = sum(yards_gained <0), zero_att = sum(yards_gained == "0"), positive_att = sum(yards_gained >0), lost_yards = sum(yards_gained [yards_gained<0]), yards_0_10 = sum(yards_gained [yards_gained>=0 & yards_gained<10]), yards_10_20 = sum(yards_gained [yards_gained>=10 & yards_gained<20]), yards_20 = sum(yards_gained [yards_gained>=20]), positiv_yards = sum(yards_gained [yards_gained>0]), yards_total = sum(yards_gained), lower = min(yards_gained), avg = mean(yards_gained), upper =max(yards_gained)) %>% ungroup() %>% gt()
可以正常显示的代码
library(nflfastR) library(gt) library(tidyverse) pbp_rp <- load_pbp(2023) %>% drop_na(yards_gained) %>% filter(rush == 1 | pass == 1, !is.na(yards_gained)) %>% select(posteam, yards_gained, week) %>% group_by(posteam) %>% summarise(att = sum(!is.na(yards_gained)), lost_att = sum(yards_gained <0), zero_att = sum(yards_gained == "0"), positive_att = sum(yards_gained >0), lost_yards = sum(yards_gained [yards_gained<0]), yards_0_10 = sum(yards_gained [yards_gained>=0 & yards_gained<10]), yards_10_20 = sum(yards_gained [yards_gained>=10 & yards_gained<20]), yards_20 = sum(yards_gained [yards_gained>=20]), positiv_yards = sum(yards_gained [yards_gained>0]), yards_total = sum(yards_gained), lower = min(yards_gained), avg = mean(yards_gained), upper =max(yards_gained)) %>% ungroup() pbp_rp %>% gt()
原因解释
核心在于R的赋值操作与对象渲染逻辑差异:
- 当把
gt()结果直接赋值给变量时,R仅完成对象存储,不会触发gt包的表格渲染机制,因此查看器无输出;你看到的"列表"是R对gt对象的默认打印格式,并非真的将DataFrame转为列表。 - 单独执行
pbp_rp %>% gt()时,表达式未被赋值,R会在控制台返回gt对象,此时gt包的S3方法自动触发渲染,将表格输出到查看器。
解决方法
若要在管道末尾赋值的同时显示表格,可在最后追加%>% print()强制触发渲染:
pbp_rp <- load_pbp(2023) %>% # 保留原有数据处理步骤 ungroup() %>% gt() %>% print()
内容的提问来源于stack exchange,提问作者Jackie Nielsen
相关产品推荐
相关产品推荐

