升级R和RStudio后CreateTableOne无法输出中位数IQR且转CSV失败
问题与解决方案
问题描述
- 使用
CreateTableOne()生成表格后,在*print()中指定nonnormal*参数,仍无法输出中位数(Median)和四分位距(IQR) - 原TableOne对象转CSV的代码报错,错误信息:
Error in as.data.frame.default(x[[i]], optional = TRUE, stringsAsFactors = stringsAsFactors) : cannot coerce class ‘"TableOne"’ to a data.frame
环境与代码信息
R版本信息
R.version _ platform aarch64-apple-darwin20 arch aarch64 os darwin20 system aarch64, darwin20 status major 4 minor 5.0 year 2025 month 04 day 11 svn rev 88135 language R version.string R version 4.5.0 (2025-04-11) nickname How About a Twenty-Six
相关代码
- 创建TableOne对象:
TropCVS4.Demo= CreateTableOne(table_vars_Demo, strata = "MACE30", addOverall = T, includeNA = T, data= TropCVS4, smd = F)
- 指定*
nonnormal参数的print()*代码:
Nonnormal.Vars <- c("Demo.Age","Demo.Height","Demo.Weight","Demo.BMI","Demo.BSA") TropCVS4.Demo.table.nonnormal= print(TropCVS4.Demo.table,nonnormal = Nonnormal.Vars,showAllLevels = T, smd = F)
- 转CSV代码及报错:
TropCVS4.Demo.table= print(TropCVS4.Demo,showAllLevels = T, smd = T) write.csv(TropCVS4.Demo.table, "tables/TropCVS4.Demo.table.csv")
解决方案
问题1:无法输出中位数和四分位距
问题根源是调用*print()*时使用了错误的对象,且未指定返回格式。解决步骤:
- 确认
Nonnormal.Vars中的所有变量都包含在table_vars_Demo中,且为数值型变量 - 直接对原始的
TropCVS4.Demo对象调用*print(),同时指定nonnormal和returnText=TRUE*参数:
Nonnormal.Vars <- c("Demo.Age","Demo.Height","Demo.Weight","Demo.BMI","Demo.BSA") TropCVS4.Demo.table.nonnormal <- print(TropCVS4.Demo, nonnormal = Nonnormal.Vars, showAllLevels = TRUE, smd = FALSE, returnText = TRUE)
*returnText=TRUE*会返回文本格式的表格,确保非正态变量以中位数+IQR的形式展示。
问题2:无法将TableOne对象转为CSV
print(TableOne)默认返回的是TableOne类对象,而非数据框,导致write.csv()无法处理。解决方法是在print()中指定returnDataFrame=TRUE,直接返回数据框格式:
TropCVS4.Demo.table <- print(TropCVS4.Demo, showAllLevels = TRUE, smd = TRUE, returnDataFrame = TRUE) write.csv(TropCVS4.Demo.table, "tables/TropCVS4.Demo.table.csv", row.names = FALSE)
*row.names=FALSE*用于避免将行名导出到CSV中,可根据需求调整。
内容的提问来源于stack exchange,提问作者HNM
相关产品推荐
相关产品推荐

