DT::datatable与haven_labelled数据类型冲突问题求助
DT::datatable 与 haven_labelled 类型冲突导致C栈溢出问题
问题现象
使用labelled包的set_value_labels()为数据框列设置值标签后,调用DT::datatable()会触发错误:
Error: C stack usage 15923728 is too close to the limit
普通数据框可正常通过datatable()显示,加载haven包也无法解决该问题。此前曾成功用DT展示含haven_labelled类型的数据框,推测为近期版本兼容性bug。
当前环境信息
- R版本:4.3.1
- 操作系统:Windows 10 x64
- 相关包版本:labelled_2.12.0、DT_0.29、dplyr_1.1.2
解决方法
方法1:转换labelled列类型为常规类型
将带值标签的haven_labelled列转换为因子或字符类型后,再传入datatable():
library(labelled) library(DT) library(dplyr) # 测试数据复现问题 testDf <- data.frame(a = 1:5, b = c(1,2,1,2,1)) test2Df <- testDf %>% set_value_labels(b = c("是"=1, "否"=2)) # 转换b列为因子类型(保留标签文本) test2Df_fixed <- test2Df %>% mutate(b = to_factor(b)) # 若不需要标签文本,也可转换为字符类型 # test2Df_fixed <- test2Df %>% mutate(b = as.character(b)) # 正常渲染表格 datatable(test2Df_fixed)
方法2:降级冲突包版本
若确认为版本兼容性bug,可降级到之前能正常工作的包版本:
# 先安装devtools工具包(若未安装) install.packages("devtools") library(devtools) # 降级labelled到指定稳定版本(示例为2.11.0,需根据实际情况调整) install_version("labelled", version = "2.11.0") # 或降级DT到指定版本 install_version("DT", version = "0.28")
额外建议
可在DT或labelled包的GitHub仓库提交issue,提供复现代码和环境信息,协助开发者修复该兼容性问题。
内容的提问来源于stack exchange,提问作者bcarothers
相关产品推荐
相关产品推荐

