如何在R语言reactable可展开行中展示数据框内存储的图片
可行实现方案
方案1:R端渲染(适合静态场景)
你之前的第一种写法调整后即可正常显示图片,无需给隐藏的image列设置多余属性,确保加载htmltools依赖即可:
library(tidyverse) library(reactable) library(htmltools) # 准备示例数据 img_df <- tribble(~image, "<img src='https://upload.wikimedia.org/wikipedia/commons/thumb/5/56/Kosaciec_szczecinkowaty_Iris_setosa.jpg/450px-Kosaciec_szczecinkowaty_Iris_setosa.jpg' style='max-width: 300px;'/>", "<img src='https://upload.wikimedia.org/wikipedia/commons/thumb/4/41/Iris_versicolor_3.jpg/320px-Iris_versicolor_3.jpg' style='max-width: 300px;'/>", "<img src='https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Iris_virginica.jpg/295px-Iris_virginica.jpg' style='max-width: 300px;'/>" ) iris %>% group_by(Species) %>% summarize(mean = mean(Sepal.Length)) %>% add_column(img_df) -> df # 生成reactable表格 reactable(df, columns = list( image = colDef(show = FALSE) # 仅隐藏image列,不需要其他配置 ), details = function(index) { # 加边距容器优化显示效果,直接解析image列的HTML内容 div( style = "padding: 12px;", HTML(df$image[index]) ) })
方案2:JS端渲染(适合交互场景)
修改你第二种写法的JS逻辑,仅返回图片内容即可避免多余的行信息展示:
reactable(df, columns = list( image = colDef(show = FALSE) ), details = colDef( name = "查看图片", details = JS(" function(rowInfo) { return `<div style='padding: 12px;'>${rowInfo.row.image}</div>` } "), html = TRUE, width = 100 ))
踩坑说明
- 第一种写法图片不显示的核心原因是未正确加载
htmltools依赖,或给隐藏列配置了多余的渲染属性 - 第二种写法只需要删除JS函数中多余的行信息打印逻辑,仅保留image字段输出即可
内容的提问来源于stack exchange,提问作者acircleda
相关产品推荐
相关产品推荐

