如何加宽文本输出窗口?解决线性混合模型输出自动换行问题
解决线性混合模型输出自动换行的问题
我来帮你搞定这个头疼的换行问题!你试过的全局width设置和普通tidy参数没生效,大概率是因为线性混合模型(LMM)的输出格式比较特殊,普通的全局设置或者基础tidy工具覆盖不了它的默认格式。下面给你几个亲测有效的解决方案:
方法1:给模型的print方法手动指定宽度
lmer模型的print()函数自带width参数,全局的options(width=xxx)对它不生效,直接在print时指定超大宽度就行:
# 先拟合你的模型(用sleepstudy数据集举例子) model <- lmer(Reaction ~ Days + (Days | Subject), data = sleepstudy) # 手动设置width来避免换行 print(model, width = 1000)
方法2:用broom.mixed生成整洁的表格输出
如果不想看原始的模型输出样式,想得到更规范、不会换行的表格,推荐用专门针对混合模型的broom.mixed包,配合knitr::kable()来渲染:
首先在setup里加载包:
knitr::opts_chunk$set(echo = TRUE) library(ggplot2) library(lmerTest) library(lme4) library(tidyverse) library(broom.mixed) # 新增这个包
然后生成表格:
model <- lmer(Reaction ~ Days + (Days | Subject), data = sleepstudy) # 输出固定效应 knitr::kable( tidy(model, effects = "fixed", conf.int = TRUE), align = "c", caption = "线性混合模型的固定效应结果" ) # 输出随机效应 knitr::kable( tidy(model, effects = "ran_vals"), align = "c", caption = "线性混合模型的随机效应结果" )
这种方式不仅不会换行,还能让结果更易读,适合报告输出。
方法3:捕获输出后强制不换行
如果一定要保留原始输出的样式,可以用capture.output()把模型输出抓成文本,再用cat()输出:
model <- lmer(Reaction ~ Days + (Days | Subject), data = sleepstudy) # 捕获输出文本 model_output <- capture.output(print(model, width = 1000)) # 强制按原始格式输出,不自动换行 cat(paste(model_output, collapse = "\n"), "\n")
为什么之前的方法没用?
options(width=1000)是全局文本输出宽度,但lmer的print方法有自己独立的width参数,默认不继承全局设置;- 普通的
tidy=TRUE是针对基础统计模型的,混合模型需要用broom.mixed包的tidy函数,之前的tidy.opts自然也起不到作用啦。
内容的提问来源于stack exchange,提问作者Nicholas Hayden
相关产品推荐
相关产品推荐

