当前位置:首页>讲义>R语言临床预测模型讲义1:R语言基础

R语言临床预测模型讲义1:R语言基础

  • 2026-04-15 20:09:40
R语言临床预测模型讲义1:R语言基础
安装和环境配置怎么做看PPT,这里展示课程中的相关代码!

注意事项:

  • 注意大小写和空格
  • 注意代码的完整性
  • 注意别用中文的逗号啥的
  • 报错了一定要仔细看看它写的啥,可以根据写的内容推断为什么报错
  • 报错先尝试自己解决,自己解决报错也是提升Coding能力的一个非常重要的过程
  • 课程的学习只是让你大概懂得这是什么以及R的基本使用逻辑,进一步的提升自己的能力一定是多看多用多想!
  • 最后,相信自己一定可以学会!

1. Rstudio介绍

如何设置相关的主题?Tools – Global Option

模块
功能说明
常用操作
1️⃣ Script(左上)
编辑区,用来写、保存和运行R脚本(.R)
Ctrl+Enter
 运行选中代码
2️⃣ Console(左下)
命令行窗口,执行R代码、显示结果
输入命令后回车直接运行
3️⃣ Environment / History(右上)
查看当前加载的对象与变量
点击小扫帚🧹清空环境
4️⃣ Files / Plots / Packages / Help(右下)
文件管理、绘图展示、包管理与帮助查询
“Plots” 可导出图片,“Packages” 管理包

常用快捷键

功能
操作方式
运行选中代码Ctrl + Enter
运行全部代码Ctrl + Shift + Enter
保存脚本Ctrl + S
清空环境变量
点击 Environment 面板右上角🧹
注释/取消注释代码Ctrl + Shift + C
<-
 赋值符号
Alt + 减号
快速查看帮助文档F1
  • 其他的快捷键:在Rstudio界面中点击Tools + Keyboard Shortcuts Help可以查看所有的快捷键

2. 工作路径!✨

  • 贯彻所有项目的重中之重,一定要理解这个工作路径

    工作路径 = R默认读写文件的文件夹。当你用 read.csv() 或 saveRDS() 读写文件时,如果没写完整路径,R就会在工作路径中查找或保存文件。

方法1:通过 RStudio 菜单设置

  • 1
  • 2
getwd()# 查看当前工作路径setwd()# 设置工作路径

方法2:通过 RStudio 菜单设置

操作路径:Session → Set Working Directory → Choose Directory…  选择目标文件夹即可。  


3. 导入和导出文件

3.1 内置数据的演示

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
# 内置数据iris <- irisdemo <- irisdemo <- iris[,3:5]demo <- head(iris,50)demo <- iris[1:60,]demo <- iris[1:60,3:5]write.csv(demo,"data.csv")write.csv(demo,"data.csv", row.names =FALSE)# 相对路径的导出/适合大项目dir.create("data", showWarnings =FALSE)write.csv(demo,"data/data.csv", row.names =FALSE)

3.2 Excel格式数据的导入

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
library(readxl)# 读取第1个sheetdf_xlsx <- read_excel("data.xlsx",                      sheet =1,# 这是导入第一个sheet,或者也可以 sheet = "Sheet名"                      na ="NA")# NA值定义

3.3 SPSS / SAS / Stata 等

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
library(haven)# SPSSdf_spss <- read_sav("data.sav")# Statadf_dta <- read_dta("data.dta")# SASdf_sas <- read_sas("data.sas7bdat")

3.4 RDS / RData(R 原生格式)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
# RDS单对象saveRDS(demo,"data.rds")df_rds <- readRDS("data.rds")# RData可含多个对象save(data, demo, iris, file ="data.Rdata")load("data.Rdata")

4. R语言数据结构基础

类型
说明
特点
示例
向量(Vector)
最基本的单维数据结构
所有元素必须为同一类型(如全是数字或字符)
c(1, 2, 3)
 、c("A","B","C")
矩阵(Matrix)
二维数组结构
所有元素同类型,按行列排列
matrix(1:6, nrow=2, ncol=3)
数据框(Data Frame)
最常用的数据结构,类似Excel表格
每列可为不同类型(数值、字符、因子),每行代表一个样本
data.frame(ID=1:3, Age=c(25,30,35))
列表(List)
可容纳不同类型甚至不同结构的数据
灵活、嵌套性强,可包含向量、数据框、模型结果等
list(a=1:3, b=c("A","B"), c=df)

Vector → Matrix → Data Frame → List          ↑             ↑     (同类型二维)   (多类型二维)

常见的场景
对应的数据结构
理由
临床病例数据表
data.frame
每行一个病例、每列一个变量
单细胞或转录组矩阵
matrix / data.frame/list
数值密集、用于后续矩阵计算
复杂分析结果(模型、指标等)
list
同时保存模型对象、ROC结果、变量重要性等,后面的课程可以看到很多这种结构的数据
变量或标签集合
vector
保存简单序列,如基因名、样本ID等

4.1 数据类型的理解

  • 1
  • 2
  • 3
str(data)class(data)# 查看数据的类型和大致结构

可以在Rstudio中查看相关的数据内容

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
# 向量PL <- iris$Petal.LengthPW <- iris$Petal.WidthSpecies <- iris$Species# 矩阵mat <- cbind(PL, PW, Species)class(mat)# 数据框dataframedf <- data.frame(PL, PW, Species)class(df)# dataframe再创建的时候可以命名df1 <- data.frame(Petal.Length = PL,                  Petal.Width = PW,                  Species = Species)

4.2 数据框的基本操作

先想好要做什么,再去想怎么实现你想的功能这里只介绍基本常用的功能

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
# 在之前已经讲了一些数据框的基本操作iris <- irisdemo <- iris[,3:5]demo <- head(iris,60)demo <- iris[1:60,]demo <- iris[1:60,3:5]

一、载入并查看数据结构

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
# R内置数据集 irisdata(iris)# 查看前几行数据head(iris)# 查看后几行tail(iris)# 查看行列数dim(iris)# 150行 5列#只查看行数(有时候可以用来作为计算,有用后面会提到)nrow(iris)# 查看列名names(iris)colnames(iris)# 查看结构与类型str(iris)class(iris)

二、访问列与元素

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
# 访问单列iris$Species# 多列iris[,c("Sepal.Length","Sepal.Width")]# 按行列索引取值(第1行第3列)iris[1,3]# 按条件筛选subset(iris, Species =="setosa")# 筛选多个条件subset(iris, Species =="setosa"& Petal.Length >1.4)

三、添加与删除列

  • 1
  • 2
  • 3
  • 4
  • 5
# 添加新列:花瓣面积iris$Petal.Area <- iris$Petal.Length * iris$Petal.Width# 删除列(用 NULL)iris$Petal.Area <-NULLiris <- iris[,-2]

四、数据汇总与统计

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
# 基本统计summary(iris)# 计算平均花瓣长度mean(iris$Petal.Length)# 按物种分组求均值aggregate(Petal.Length ~ Species, data = iris, mean)

五、排序与筛选

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
# 按花瓣长度升序排序iris_sorted <- iris[order(iris$Petal.Length),]# 按花瓣长度降序iris_sorted_desc <- iris[order(-iris$Petal.Length),]# 筛选花瓣长度大于5的样本subset(iris, Petal.Length >5)

六、选择性输出结果

  • 1
  • 2
  • 3
  • 4
  • 5
# 选出前10行3列iris_sub <- iris[1:10,1:3]# 随机抽取样本set.seed(123)iris_sample <- iris[sample(nrow(iris),5),]

七、进阶推荐(tidyverse)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
library(dplyr)# 前几行`setosa`中花瓣/花萼比例最高的样本。iris %>%  filter(Species =="setosa")%>%  select(Sepal.Length, Petal.Length)%>%  mutate(Ratio = Petal.Length / Sepal.Length)%>%  arrange(desc(Ratio))%>%  head()

简单总结

操作类型
基础函数
tidyverse替代
筛选行
subset()
[ ]
filter()
选择列
[ , c()]select()
新增列
iris$new <- ...mutate()
排序
order()arrange()
分组汇总
aggregate()group_by()
 + summarise()

5. 基本绘图与可视化

这里主要使用ggplot2进行绘图的展示和教学

本章内容参考R for Data Science (2e)[https://r4ds.hadley.nz/];此外,也可以参考 https://r-graph-gallery.com/ 网站和ggplot2的官方文档[https://github.com/rstudio/cheatsheets/blob/main/data-visualization.pdf]本人认为,微信公众号的搜一搜功能是最好的R绘图参考数据库!大家可以多用用。

5.1 安装和加载必要的R包

  • 1
  • 2
  • 3
  • 4
# 注意:只需要在首次使用时安装if(!require("tidyverse")) install.packages("tidyverse")if(!require("palmerpenguins")) install.packages("palmerpenguins")if(!require("ggthemes")) install.packages("ggthemes")

除了 tidyverse,还需要使用到 palmerpenguins 包,其中包括包含帕尔默群岛三个岛屿上企鹅身体测量的数据集,以及 ggthemes 包,用于提供颜色搭配和主题搭配。

  • 1
  • 2
  • 3
  • 4
library(tidyverse)# 包含ggplot2library(palmerpenguins)# 企鹅数据集library(ggthemes)# 扩展主题view(penguins)

在开始学习前,我们先思考几个关键问题:

  • 如何用散点图探索两个数值变量关系?
  • 如何用图形语法表达分组差异?
  • 如何打造符合学术出版要求的精美图表?
  • 如何正确导出不同格式的图片?

5.2 最终绘图代码(我们的分步优化目标):

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
ggplot(  data = penguins,  mapping = aes(= flipper_length_mm, y = body_mass_g))+  geom_point(aes(color = species, shape = species))+  geom_smooth(method ="lm")+  labs(    title ="Body mass and flipper length",    subtitle ="Dimensions for Adelie, Chinstrap, and Gentoo Penguins",    x ="Flipper length (mm)", y ="Body mass (g)",    color ="Species", shape ="Species")+  scale_color_colorblind()

5.3 ggplot2核心语法结构

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
ggplot2核心语法├─ 数据层 (data)├─ 映射层 (aes)├─ 几何对象 (geom_*)├─ 统计变换 (stat_*)├─ 坐标系 (coord_*)├─ 分面系统 (facet_*)└─ 主题系统 (theme_*)注释系统(annotate)

5.4 分段演示:

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
# 基础图层base_plot <- ggplot(  data = penguins,  mapping = aes(= flipper_length_mm, y = body_mass_g))# 添加几何对象scatter_plot <- base_plot +  geom_point(aes(color = species, shape = species), size =3, alpha =0.8)+  geom_smooth(method ="lm", se =FALSE, color ="black")# 美化设置final_plot <- scatter_plot +  labs(    title ="企鹅身体形态关系研究",    subtitle ="基于帕尔默群岛企鹅观测数据",    x ="鳍肢长度 (mm)",    y ="体重 (g)",    caption ="数据来源:palmerpenguins包")+  scale_color_colorblind()+  theme_economist()# 使用ggthemes的经典主题print(final_plot)

5.5 ggplot2 基础绘图代码简介

如何可视化变量的分布取决于变量的类型:分类或数值

单个变量的可视化

分类变量

  • 1
  • 2
  • 3
  • 4
  • 5
ggplot(penguins, aes(= species))+  geom_bar()ggplot(penguins, aes(= fct_infreq(species)))+### 根据条形的频率对条形进行重新排序  geom_bar()

数值变量

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
# 直方图,关键参数 binwidthggplot(penguins, aes(= body_mass_g))+  geom_histogram(binwidth =200)ggplot(penguins, aes(= body_mass_g))+  geom_histogram(binwidth =20)ggplot(penguins, aes(= body_mass_g))+  geom_histogram(binwidth =2000)# 密度图(生信中用的很多)很多图是根据这个的变种做出来的ggplot(penguins, aes(= body_mass_g))+  geom_density()

变量关系可视化指南(二维三维四维)

变量类型组合
推荐图形
适用场景
数值 vs 数值
散点图、平滑曲线
相关性分析
分类 vs 数值
箱线图、小提琴图
组间比较
分类 vs 分类
堆叠柱状图、饼图等
频数分布比较

分类变量和连续变量的关系

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
# 箱线图ggplot(penguins, aes(= species, y = body_mass_g))+  geom_boxplot()# + geom_violin() + geom_jitter()# 密度图ggplot(penguins, aes(= body_mass_g, color = species))+  geom_density(linewidth =0.75)

分类和分类变量的关系

  • 1
  • 2
  • 3
  • 4
  • 5
# 堆叠柱状图用的最多也最实用ggplot(penguins, aes(= island, fill = species))+  geom_bar()ggplot(penguins, aes(= island, fill = species))+  geom_bar(position ="fill")

数值变量和数值变量之间的关系

  • 1
  • 2
ggplot(penguins, aes(= flipper_length_mm, y = body_mass_g))+  geom_point()

三维或者四维的图表展示

  • 使用点的大小(eg. 气泡图)、颜色、形状等来展示其他维度的数据,也可以绘制三维的坐标轴展示三维的数据(但太抽象我一般不用)
  • 1
  • 2
  • 3
  • 4
  • 5
ggplot(penguins, aes(= flipper_length_mm, y = body_mass_g))+  geom_point(aes(color = species, shape = island))ggplot(penguins, aes(= flipper_length_mm, y = body_mass_g))+  geom_point(aes(color = species, shape = species))+  facet_wrap(~island)

geom_( )汇总

函数名称描述
geom_blank
在图形中插入空白元素。
geom_curve
用于绘制平滑曲线。
geom_path
用于绘制点之间的连线。
geom_polygon
用于绘制多边形。
geom_rect
用于绘制矩形。
geom_ribbon
用于绘制带状区域。
geom_abline
用于绘制直线。
geom_hline
用于绘制水平线。
geom_vline
用于绘制垂直线。
geom_segment
用于绘制线段。
geom_spoke
用于绘制指向某一方向的线段。
geom_area
用于绘制面积图。
geom_density
用于绘制密度图。
geom_dotplot
用于绘制点图。
geom_freqpoly
用于绘制频数多边形图。
geom_histogram
用于绘制直方图。
geom_qq
用于绘制QQ图。
geom_bar
用于绘制柱状图。
geom_label
用于添加文本标签。
geom_jitter
用于对数据进行抖动,避免重叠。
geom_point
用于绘制散点图。
geom_quantile
用于绘制分位数图。
geom_rug
用于在坐标轴上绘制小竖条,表示数据的分布情况。
geom_smooth
用于添加平滑曲线或回归线。
geom_text
用于绘制文本。
geom_col
用于绘制条形图。
geom_boxplot
用于绘制箱线图。
geom_violin
用于绘制小提琴图。
geom_count
用于计算和绘制每个组中的观测值计数。
geom_contour
用于绘制等高线图。
geom_bin2d
用于绘制二维直方图。
geom_density2d
用于绘制二维密度图。
geom_hex
用于绘制六边形直方图。
geom_line
用于绘制折线图。
geom_step
用于绘制阶梯图。
geom_crossbar
用于绘制带有上下界的线段。
geom_errorbar
用于绘制误差棒。
geom_linerange
用于绘制带有最小值和最大值的线段。
geom_pointrange
用于绘制带有点和最小值最大值的线段。
geom_map
用于绘制地图。
geom_raster
用于绘制位图。
geom_tile
用于绘制矩形区域。

5.6 构建自己的美化图表代码库(分功能)

颜色

颜色可以平时收集不同的色卡,也可以直接用配色的包这里推荐一个色卡

  • 1
  • 2
  • 3
  • 4
install.packages("MetBrewer")install.packages("devtools")devtools::install_github("BlakeRMills/MetBrewer")

色卡参考上图的名称,以下是官方提供的使用示例,颜色代码的本质是一个包含各种颜色16进制代码或者名称的vector向量 c("red","blue")

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
ggplot(data=iris, aes(x=Species, y=Petal.Length, fill=Species))+  geom_violin()+  scale_fill_manual(values=met.brewer("Greek",3))ggplot(data=iris, aes(x=Sepal.Length, y=Sepal.Width, color=Species))+  geom_point(size=2)+  scale_color_manual(values=met.brewer("Renoir",3))ggplot(data=iris, aes(x=Species, y=Sepal.Width, color=Sepal.Width))+  geom_point(size=3)+  scale_color_gradientn(colors=met.brewer("Isfahan1"))

字体大小?坐标轴,标题字体,图例字体大小

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
font_custom <-function(base_size =12){  theme(    axis.text = element_text(size = base_size +4),# 坐标轴文字调节    axis.title = element_text(size = base_size +6),# 坐标轴标题    plot.title = element_text(size = base_size +8,# 主标题                              face ="bold",                              hjust =0.5),    legend.text = element_text(size = base_size +2),# 图例文字    legend.title = element_text(size = base_size +4)# 图例标题)}

坐标轴边框范围和刻度

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
theme(# 显示顶部和右侧轴线        axis.line.x.top = element_line(color = line_color,                                      size = line_size),        axis.line.y.right = element_line(color = line_color,                                        size = line_size),        panel.border = element_blank(),# 隐藏默认panel边框        scale_x_continuous(#limits = c(0,10),                        expand =c(0.02,0)),# 控制轴两侧留白        scale_y_continuous(#limits = c(0,10,                        expand =c(0.02,0))

标题和名称

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
labs(title ="Penguin Morphology Relationship", subtitle ="Palmer Station Antarctica", x ="Flipper Length (mm)", y ="Body Mass (g)", color ="Penguin Species",# 图例标题 shape ="Penguin Species")

图例的编辑

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
legend_custom <-function(){  theme(    legend.position ="bottom",# 图例位置    legend.box ="horizontal",# 图例排列方向    legend.background = element_blank(),# 清除背景    legend.key = element_blank()# 清除图例键背景)}

图片的导出

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
# pdf格式,矢量图,可编辑,强烈推荐ggsave(  filename = paste0(base_name,".pdf"),#在这里给图片命名  plot = p,  device = cairo_pdf,  path = output_dir,  width =8,  height =6,  useDingbats =FALSE)## pdf 格式的图片不用设置dpi,因为是矢量图,以下tiff和png都是需要设置dpi的# 保存为TIFF格式(论文出版),文件较大,不是很推荐,其实不是很清晰ggsave(  filename ="plot.tiff"),#在这里给图片命名  plot = p,  device ="tiff",  path = output_dir,  dpi =600,# dpi 一般期刊要求300以上,我一般选600  width =17.4,# 根据自己的图片调  height =12,  units ="cm",  compression ="lzw"# 无损压缩)# 保存为PNG格式,我一般保存pdf和png双格式,这个格式非常清晰,且占用空间极小,适合用于PPT的制作,非常推荐ggsave(  filename ="plot.png"),#在这里给图片命名  plot = p,  device ="png",  path = output_dir,  dpi =600,  width =2400,# 像素单位,自己调一下  height =1600,  units ="px",  bg ="white"# 设置背景色(透明背景用"transparent"),默认好像是透明色)

论文图表设计清单

在提交论文前,请检查:

  •  所有文字字号是不是拼成大图后太小看不清
  •  坐标轴标标题包含单位等完整信息
  •  图例标题具有实际意义
  •  如果是多维度数据,是否同一个变量被重复可视化?
  •  颜色在黑白打印下可区分
  •  图片分辨率≥300dpi(位图)放大150%后任然能够看清楚文字等细节

5.7 构建目的引导、大语言模型辅助的代码习惯

实际上,代码语言本质上只是一个工具。你真正需要掌握的,并不是“写代码”本身,而是如何利用代码去解决问题。如果长期停留在机械复现他人代码、反复照抄示例的阶段,很容易陷入“看似很努力,实则没有进步”的困境。

在这一期课程中,我会专门和大家讲一件越来越绕不开的事情:如何正确地使用大语言模型(LLM)来辅助生成代码

正如我之前反复强调的,大语言模型的使用门槛极低。只要你愿意输入一句话,它就可以给你生成上百行、甚至上千行的代码。但问题恰恰出在这里——代码是写出来了,但你并不知道它在做什么,更无法判断它是否在“正确地做你想做的事”。久而久之,这反而会成为你学习一门编程语言的最大阻碍。

我对此印象非常深刻。有一次,一位研一的师弟来找我,导师让我带他“简单入个门”。我当时的建议很朴素:先学 R,随便看看入门视频,遇到问题就用 ChatGPT 写代码即可。

两天后我去他工位看了一眼,发现他已经开始“赛博炼丹”。他直接给 GPT 抛出了一个极其宏大的研究目标,GPT 回了他一段结构复杂、依赖繁多的代码;他把代码原封不动复制运行,报错后再把报错完整粘给 GPT;GPT 又在原代码上打了一堆补丁;然后继续报错……如此循环,最后代码依旧没跑通,他本人也彻底陷入了挫败状态。

后来我仔细复盘了一下,这件事的核心问题并不在于 GPT,也不在于 R,而在于一句话:

他根本不知道自己“具体想做什么”。

只有当你明确了“我要完成什么目标”,你才会有动力、也有方向去学习新的技能,并判断一段代码到底是“对我有用”还是“看起来很厉害”。

学习 R 也是完全一样的逻辑。你不是在学一门语言,而是在借助一门语言完成任务

R 和 Python 在能力边界上远比大多数初学者想象得要宽,它们几乎可以完成你在科研与临床研究中能想到的所有分析任务。因此,真正困难、也真正重要的,并不是语法本身,而是:

如何把你的研究目标,拆解成清晰、可执行、可被代码实现的需求。

基于我这些年在临床预测模型教学与科研实践中的经验,我将 R 语言在临床预测模型中的“需求” 总结为以下几个核心类别。你可以把它们理解为:你向大语言模型提问、向代码发号施令时,最常用的“问题模板”。

  • 目标/场景:告诉LLM他的角色是什么(擅长R语言的临床医生),告诉它我要解决什么问题,用在什么场景(论文/汇报/上线脚本)。
  • 任务类型:清洗 / 探索分析 / 建模 / 可视化 / 自动化脚本 / Debug。
  • 数据与结构:数据来源、对象名/路径、行列规模、关键字段解释;给 head()/str() 或 3 行样例。
  • 语言与环境:R/Python/SQL;版本;操作系统;能否安装包;是否离线。
  • 约束与偏好:速度/内存/可读性优先级;不要用哪些包;是否函数化;是否需要注释。
  • 方法与细节要求:分组定义、缺失值策略、统计方法/模型、参数范围、随机种子、绘图风格。
  • 输出要求:需要输出什么(对象/图/表/文件);文件名;格式(csv/xlsx/pdf);是否要中英文注释。
  • 验收标准:我用什么来判断做对了(例如列数、行数、指标范围、示例输出长什么样)。
  • 潜在问题/已知报错(如有):报错信息、你已经尝试过什么。
  • 1
你是一个擅长R语言的专家,我现在有一个名为 df 的数据框(粘贴你的数据的head(df))(示例:大约 120 行、至少包含两列:分组变量 Group=“A/B/C”和连续数值变量 QoR15_24h),想用 R(优先 ggplot2,可用 ggpubr)画一张可用于论文/汇报的箱线图:横轴为 Group,纵轴为 QoR15_24h;要求同时叠加抖动散点以展示个体分布,箱线图不显示离群点(避免遮挡),并在图上标注统计学比较结果(先做三组总体差异检验 Kruskal-Wallis,再做两两 Wilcoxon 检验并进行 BH 校正,标注为格式化 p 值或星号均可);请在代码里先处理常见问题(将 Group 设定为因子并固定顺序 A、B、C;将 QoR15_24h 强制为数值型并剔除 NA),然后生成图对象并保存为矢量格式 PDF(文件名 fig_boxplot_QoR15_24h.pdf,尺寸约 6×4 inch);整体风格简洁,配色采用低饱和度的顶刊适用配色,标题与坐标轴标签清晰,输出为一段可直接运行的完整 R 代码。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-04-27 22:12:44 HTTP/2.0 GET : https://a.sjds.net/a/459401.html
  2. 运行时间 : 0.076510s [ 吞吐率:13.07req/s ] 内存消耗:4,424.06kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=1177567b7e1b8d922141bbc9c2f98700
  1. /yingpanguazai/ssd/ssd1/www/a.sjds.net/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/a.sjds.net/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/a.sjds.net/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/a.sjds.net/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/a.sjds.net/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/a.sjds.net/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/a.sjds.net/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/a.sjds.net/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/a.sjds.net/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/a.sjds.net/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/a.sjds.net/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/a.sjds.net/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/a.sjds.net/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/a.sjds.net/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/a.sjds.net/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/a.sjds.net/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/a.sjds.net/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/a.sjds.net/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/a.sjds.net/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/a.sjds.net/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/a.sjds.net/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/a.sjds.net/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/a.sjds.net/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/a.sjds.net/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/a.sjds.net/runtime/temp/97cad012e8e159aae2fe347a411e8351.php ( 12.06 KB )
  140. /yingpanguazai/ssd/ssd1/www/a.sjds.net/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000525s ] mysql:host=127.0.0.1;port=3306;dbname=a_sjds;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000768s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000336s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000257s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000544s ]
  6. SELECT * FROM `set` [ RunTime:0.000205s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000509s ]
  8. SELECT * FROM `article` WHERE `id` = 459401 LIMIT 1 [ RunTime:0.000521s ]
  9. UPDATE `article` SET `lasttime` = 1777299164 WHERE `id` = 459401 [ RunTime:0.002816s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 65 LIMIT 1 [ RunTime:0.000261s ]
  11. SELECT * FROM `article` WHERE `id` < 459401 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000480s ]
  12. SELECT * FROM `article` WHERE `id` > 459401 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000407s ]
  13. SELECT * FROM `article` WHERE `id` < 459401 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.000683s ]
  14. SELECT * FROM `article` WHERE `id` < 459401 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.000642s ]
  15. SELECT * FROM `article` WHERE `id` < 459401 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.001727s ]
0.078134s