当前位置:首页>学习笔记>优秀学员R学习笔记(四):数据读写、流程控制和批处理

优秀学员R学习笔记(四):数据读写、流程控制和批处理

  • 2026-04-12 23:46:52
优秀学员R学习笔记(四):数据读写、流程控制和批处理

R语言: 数据读写、流程控制和批处理

0. 写在最前

之前我们对R语言中的数据类型和结构有了初步的认识:

数据类型:

  • 数值型(numeric)
  • 字符型 (character)
  • 逻辑型 (logical)

数据结构:

  • 变量 (variable)
  • 向量 (vector)
  • 矩阵 (matrix)
  • 数据框(data frame)
  • 列表 (list)

在建立以上认知的基础上,我们可以尝试开始对生物医学研究中会接触到的数据进行处理,接下来将结合案例带大家一起完成这一部分的学习。

ps.本推文绝大多数代码来自生信技能树的小洁老师,少部分是自己手搓的

1. 数据读写

1.1 文件存放位置

1.存放在工作目录下

在工作目录下的文件可以直接读取, 例如, 若a.txt放在工作目录下, 则正确的读取代码如下:

read.table("a.txt")

这个时候就有人要问了,主播主播,为什么我按照你的读取文件时出现了这样的的报错啊:

Error in file(file, “rt”) : cannot open the connection In addition:Warning message: In file(file, “rt”) : cannot open file ‘a.txt’: No suchfile or directory

这个错误的意思是说,R语言无法找到a.txt这个文件,可能是因为文件不在当前的工作目录下,或者文件名拼写错误。解决这个问题的方法是确保a.txt文件确实存在于当前的工作目录中,并且文件名正确无误。

按道理来说,如果你先打开在你存放数据的文件夹里的.Rproj文件,工作目录是会默认设定好的,因此排除文件名错误之后可以用这个代码看看工作目录:

    getwd()

返回

  [1] "C:/Users/Administrator/Desktop/生信技能树4月班/Day3/2026_04_09_R_day3/R_day3"

如果工作目录不是你存放数据的文件夹,那么你可以使用setwd()函数来设置工作目录,例如:

setwd("D:/#your_folder_path#")#替换#your_folder_path#为你存放数据的文件夹路径

2.存放在工作目录的子目录下

如果工作目录下文件较多, 可以分类存放。将需读取的文件放入子目录, 只需在读取时添加子目录名称即可。

例如, 若a.txt放在工作目录下”raw”子目录下, 则正确的读取代码如下:

read.table("raw/a.txt")

          V1      V2 V3     1  KO-1 patient 45     2  KO-2 patient 31     3  KO-3 patient 47     4 KOC-1  normal 51     5 KOC-2  normal 40     6 KOC-3  normal 44

1.2 不推荐使用绝对路径

绝对路径是指精确位置, 相对路径是指相对于当前工作目录的文件路径。

如果我们采用绝对位置,那如果我换个电脑、换个盘或者换个文件夹,代码就全部都要改,这个过程中但凡出了点纰漏可能整个就凉了,所以不推荐使用绝对路径,通过Rproj文件直接设定好工作目录它不香吗?

比如:

ex2 = read.csv("ex2.csv")

不管我的Rproj文件放在哪里,只要ex2.csv文件和它在一个文件夹就永远能读取

1.3 data.table包的应用

刚才我们用到的read.table()和read.csv()等函数是R语言自带的,但是很多参数设置都非常恶心,那我们能不能绕开这个麻烦?

还真可以,data.table包中的fread函数读取速度快,智能, csv、txt、tsv等不同格式的数据可用相同代码读取,使用简单, 例如:

示例一:ex1.txt

library(data.table)ex1 = fread("ex1.txt")class(ex1)

     [1] "data.table""data.frame"

OK,那现在为什么我一个变量有了两个数据结构呢?这是因为fread函数默认返回的是data.table数据结构,data.table是data.frame的一个增强版本,具有更高的性能和更多的功能,因此它同时具有data.frame和data.table的数据结构属性。

但是为了避免很多麻烦,我们可以 指定data.table = F, 产生的结果只是”data.frame”数据结构, 无需考虑data.table这种数据结构的特殊运算规则。 别问为什么,反正你直接默认加上就行了

ex1 = fread("ex1.txt",data.table = F)class(ex1)

     [1] "data.frame"

示例二:ex2.csv

ex2 = fread("ex2.csv",data.table = F)#把第一列设置为行名,这个操作在Tidyverse介绍中已经讲过了ex2 = tibble::column_to_rownames(ex2,"V1")ex2

                KO-1 KO-2 KO-3 KOC-1 KOC-2 KOC-3     DDX11L1      37   37   45    23    30    41     AL645608.8    5    4    1     7    12     8     LINC01786     8   10    5     4    11     5     TMEM240      10   17   10    16    20    10     MMP23B        6   10    8     7    10    16     CALML6       12    8    9    15    32    15     TMEM52       82   94   81    61    52    69     CFAP74       14   15   18    13     6     6     GABRD        76   71   59    37    22    27     PRKCZ-AS1    13   18   16    16    13     7

示例三:ex3.txt

ex3 = fread("ex3.txt",data.table = F)ex3

#SPOT_ID =         V2                     V3     1          ID locus.type                SPOT_ID     2      probe1  NonCoding    NR_120492 // RefSeq     3      probe2  NonCoding    NR_027447 // RefSeq     4      probe3     Coding    NM_130900 // RefSeq     5      probe4     Coding NM_001307930 // RefSeq     6      probe5     Coding    NM_005259 // RefSeq     7      probe6  NonCoding    NR_034148 // RefSeq     8      probe7     Coding    NM_030967 // RefSeq     9      probe8     Coding NM_001289158 // RefSeq     10     probe9     Coding    NM_145719 // RefSeq     11    probe10  NonCoding    NR_110751 // RefSeq

为啥原来的V1列没有被设置为行名呢?这是因为ex3.txt文件中前面有三行注释内容,fread函数默认会将这些注释内容作为数据的一部分进行读取,因此第一列的V1并没有被正确地识别为行名。给刚才的的代码加个参数就可以了

ex3 = fread("ex3.txt",data.table = F,skip = 3)#用skip跳过注释内容所在的行ex3

示例四:ex4.tsv

规则:行名不允许重复

ex4 = data.table::fread("ex4.tsv",data.table = F)ex4 = dplyr::distinct(ex4,symbol,.keep_all = T) #用distinct函数去除重复行,保留第一行,这个在Tidyverse教过了ex4 = tibble::column_to_rownames(ex4,"symbol") # 这个也讲过,但上次的例子是行变列名ex4

                      ENSEMBL sample1 sample2 sample3 sample4     TSPAN6   ENSG00000000003    5913    5122    9796    6589     DPM1     ENSG00000000419    4155    4751     782    7918     SCYL3    ENSG00000000457     793    3563     891    1373     C1orf112 ENSG00000000460    7767    1152    8879    4691     FGR      ENSG00000000938    6725    4217    3208    8283     CFH      ENSG00000000971    5824    3879     982    3545     MATR3    ENSG00000015479    8362    1978    6446    4760     POLR2J4  ENSG00000214783    1836    9201    2127    9084

1.4 rio包的应用

rio包用于简化数据导入和导出,号称”一行代码读写所有常见数据格式”。

  • import:用于读取各种文本格式的文件。
  • import_list:用于读取含有多个工作簿的xlsx格式的文件。
  • export:用于导出各种文本格式的文件(也可以导出含多个工作簿的xlsx格式的文件)。

这个函数很智能,可以根据扩展名自动选择读取方式,极大地简化读写操作。支持读取单个或多个工作簿的Excel文件。

示例一:ex1.txt

ex1.txt可以简单读取, 不需要额外指定参数。

ex1 = rio::import("ex1.txt")ex1

          id   group age     1  KO-1 patient  45     2  KO-2 patient  31     3  KO-3 patient  47     4 KOC-1  normal  51     5 KOC-2  normal  40     6 KOC-3  normal  44

示例二:ex2.csv

无法设置行名, 需要用tibble::column_to_rownames另行设置。

ex2 = rio::import("ex2.csv")ex2 = tibble::column_to_rownames(ex2,"V1")ex2

                KO-1 KO-2 KO-3 KOC-1 KOC-2 KOC-3     DDX11L1      37   37   45    23    30    41     AL645608.8    5    4    1     7    12     8     LINC01786     8   10    5     4    11     5     TMEM240      10   17   10    16    20    10     MMP23B        6   10    8     7    10    16     CALML6       12    8    9    15    32    15     TMEM52       82   94   81    61    52    69     CFAP74       14   15   18    13     6     6     GABRD        76   71   59    37    22    27     PRKCZ-AS1    13   18   16    16    13     7

示例三:ex3.txt

ex3 = rio::import("ex3.txt",skip = 3)ex3

没有设置注释的参数, 只能用skip=3跳过前3行。

             ID locus.type                SPOT_ID     1   probe1  NonCoding    NR_120492 // RefSeq     2   probe2  NonCoding    NR_027447 // RefSeq     3   probe3     Coding    NM_130900 // RefSeq     4   probe4     Coding NM_001307930 // RefSeq     5   probe5     Coding    NM_005259 // RefSeq     6   probe6  NonCoding    NR_034148 // RefSeq     7   probe7     Coding    NM_030967 // RefSeq     8   probe8     Coding NM_001289158 // RefSeq     9   probe9     Coding    NM_145719 // RefSeq     10 probe10  NonCoding    NR_110751 // RefSeq

示例四:ex4.tsv

ex4 = rio::import("ex4.tsv")ex4 = dplyr::distinct(ex4,symbol,.keep_all = T)ex4 = tibble::column_to_rownames(ex4,"symbol")ex4

                      ENSEMBL sample1 sample2 sample3 sample4     TSPAN6   ENSG00000000003    5913    5122    9796    6589     DPM1     ENSG00000000419    4155    4751     782    7918     SCYL3    ENSG00000000457     793    3563     891    1373     C1orf112 ENSG00000000460    7767    1152    8879    4691     FGR      ENSG00000000938    6725    4217    3208    8283     CFH      ENSG00000000971    5824    3879     982    3545     MATR3    ENSG00000015479    8362    1978    6446    4760     POLR2J4  ENSG00000214783    1836    9201    2127    9084

示例五:ex5.xlsx

用import函数读取该文件。代码如下:

ex5= rio::import("ex5.xlsx")ex5

          id   group age     1  KO-1 patient  45     2  KO-2 patient  31     3  KO-3 patient  47     4 KOC-1  normal  51     5 KOC-2  normal  40     6 KOC-3  normal  44

示例六:ex6.xlsx

该文件有3个工作簿。用import_list函数读取该文件。代码如下:

ex6 = rio::import_list("ex6.xlsx")ex6

$setosa       Sepal.Length Sepal.Width Petal.Length Petal.Width Species     1          5.1         3.5          1.4         0.2  setosa     2          4.9         3.0          1.4         0.2  setosa$versicolor       Sepal.Length Sepal.Width Petal.Length Petal.Width    Species     1          7.0         3.2          4.7         1.4 versicolor     2          6.4         3.2          4.5         1.5 versicolor$virginica       Sepal.Length Sepal.Width Petal.Length Petal.Width   Species     1          6.3         3.3          6.0         2.5 virginica     2          5.8         2.7          5.1         1.9 virginica

读入的结果, 数据结构为列表, 每个工作簿的内容是列表的一个元素。

导出的示例代码:

rio::export(ex1,file = "zz.csv")

但是这并不意味着万事大吉了,在现实情况下可能会遇上一些神人文件,比如xxx.csv,结果用import()函数读出来各种出问题

结果仔细一看分隔符是分号而不是逗号,这个时候就需要指定分隔符了,可以在import函数里加一个format参数:

#ex7 = rio::import("xxx.csv",format =";")

万事大吉

2.控制语句

在这里我们主要涉及if语句、ifelse函数

2.1 if 语句

其实它就是一个如果…那么…否则…的语句,纯判断

2.1.1. 没有 else 的if语句

i = -1if (i < 0) print('down')if (i > 0) print('up')
## [1] "down"

这个代码意思是说,如果i小于0,就打印”down”,如果i大于0,就打印”up”,如果i等于0,则什么都不打印。i取-1的时候肯定是打印down

2.1.2 有 else 的if语句

i = 1if (i > 0){  print('yes')} else {  print("no")}
## [1] "yes"

这个代码是说如果i大于0就打印”yes”,否则打印”no”

2.1.3 有多个条件的if语句

i = 0if (i > 0){  print('yes')} else if (i < 0) {  print('no')} else {  print('0')}
## [1] "0"

这份代码是说如果i大于0就打印”yes”,如果i小于0就打印”no”,否则打印”0” 本质上是先判断i是否大于0,在这个基础上如果触发了第一个else,就进入第二个判断,即i是否小于0,纯纯的套娃

2.2 if 语句衍生的ifelse函数

传统的if语句只支持单个逻辑值的判断。成批判断衍生了ifelse函数,可以接受多个逻辑值组成的向量。

i = 1ifelse(i > 0,"yes","no")
## [1] "yes"
i = c(-1,-2,1,2)ifelse(i > 0,"yes","no")
## [1] "no"  "no"  "yes" "yes"

这个代码是说,如果i大于0就打印”yes”,否则打印”no”, ifelse函数也可以进行套娃

在实际的数据操作中ifelse()+str_detect()可以用来根据样本信息把样本分组

library(stringr)samples = c("tumor1","tumor2","tumor3","normal1","normal2","normal3")k1 = str_detect(samples,"tumor");k1ifelse(k1,"tumor","normal")k2 = str_detect(samples,"normal");k2ifelse(k2,"tumor","normal")ifelse(k2,"normal","tumor")
## [1]  TRUE  TRUE  TRUE FALSE FALSE FALSE## [1] "tumor"  "tumor"  "tumor"  "normal" "normal" "normal"## [1] FALSE FALSE FALSE  TRUE  TRUE  TRUE## [1] "normal" "normal" "normal" "tumor"  "tumor"  "tumor"## [1] "tumor"  "tumor"  "tumor"  "normal" "normal" "normal"

在这个案例中,我们首先创建了一个包含样本名称的向量samples,其中包含了肿瘤样本和正常样本的名称。然后,我们使用str_detect()函数来检测样本名称中是否包含”tumor”或”normal”字符串,并将结果存储在逻辑向量k1k2中,切记是和否的顺序不要搞反了

练习题

把下列样本分为Control和Vemurafenib两个组

library(stringr)title <- c(  "A375 cells 24h Control rep1",  "A375 cells 24h Control rep2",  "A375 cells 24h Control rep3",  "A375 cells 24h Vemurafenib rep1",  "A375 cells 24h Vemurafenib rep2",  "A375 cells 24h Vemurafenib rep3")title
## [1] "A375 cells 24h Control rep1"     "A375 cells 24h Control rep2"    ## [3] "A375 cells 24h Control rep3"     "A375 cells 24h Vemurafenib rep1"## [5] "A375 cells 24h Vemurafenib rep2" "A375 cells 24h Vemurafenib rep3"

你可以先思考一下,看看能不能用ifelse函数结合str_detect()函数来完成这个任务。

如果是我我会这么做:

k3 <- str_detect(title,"Control");k3#先生成逻辑值group <- ifelse(k3,"Control","Vemurafenib") #用ifelse函数根据逻辑值分组,其实就相当于二分类了,如果要进行别的分析可以把它转化为因子table(group) #这里用table函数看看分组结果,看看有没有问题,我要验牌
## [1]  TRUE  TRUE  TRUE FALSE FALSE FALSE## group##     Control Vemurafenib ##           3           3

牌没有问题!但是我们再仔细思考一下,如果样本名是某个数据框的行名,如果我要标注样本所属的组别该怎么办呢?

还记不记得dplyr中的mutate函数?我们可以先把行名提取出来变成向量,然后用mutate函数结合ifelse函数来标注组别

dplyr包还有个优雅的功能,还记得我们刚才提到的多个条件的ifelse语句吗

ifelse(i>0,"yes",ifelse(i<0,"no","0"))
## [1] "no"  "no"  "yes" "yes"

dplyr给我们提供了一种类似于数学中分段函数的写法:

library(dplyr)case_when(  i > 0 ~ "yes",  i < 0 ~ "no",  TRUE  ~ "0"   )
## [1] "no"  "no"  "yes" "yes"

这段代码的意思是说,如果i大于0就返回”yes”,如果i小于0就返回”no”,否则返回”0”,case_when函数可以让我们更清晰地表达多个条件的判断逻辑,避免了嵌套的ifelse函数带来的复杂性。

那么这个时候又有人问了,这个TRUE为什么这么突兀地出现了?我们尝试这样去理解:这个世界上永远为真的数据类型有且只有TRUE,TRUE永远为真。所以当前面两种情况都没满足的时候就把TRUE拿出来兜底了。

3. 循环语句

3.1 for 循环

3.1.1. 理解for循环的原理

for循环的原理就是依次代数,即将变量x里的每个元素(代称i)带入到大括号里的代码中。

x <- c(5,6,0,3)for (i in x){  print(i)}
## [1] 5## [1] 6## [1] 0## [1] 3

3.1.2 应用:批量装包

这个东西我在第一堂课的笔记里就已经提到过

# 因为我全部装过了,所以最后只输出了包的名字pkglist <- c("data.table", "rio",  "tibble", "ggplot2")for (i in pkglist){  print(i)if(!require(i,character.only = T))install.packages(i)}
## [1] "data.table"## [1] "rio"## [1] "tibble"## [1] "ggplot2"

3.2 apply() 族函数

apply 系列函数提供对向量、矩阵、数据框、列表的函数式操作,比for循环更简洁。

3.2.1 apply 处理矩阵或数据框

1. 创建示例数据

test <- as.matrix(iris[c(1,2,51,52),1:4])rownames(test) = NULLtest
##      Sepal.Length Sepal.Width Petal.Length Petal.Width## [1,]          5.1         3.5          1.4         0.2## [2,]          4.9         3.0          1.4         0.2## [3,]          7.0         3.2          4.7         1.4## [4,]          6.4         3.2          4.5         1.5

2. 标准用法apply()函数的三个参数分别是变量、维度和函数。维度可以取1和2两个值,其中1表示按行操作,2表示按列操作。

求test矩阵的每一列的中位数:

apply(test, 2, median)
## Sepal.Length  Sepal.Width Petal.Length  Petal.Width ##         5.75         3.20         2.95         0.80

求test矩阵的每一行的方差:

apply(test, 1, var)
## [1] 4.750000 4.149167 5.622500 4.286667

3.2.2 lapply()

lapply 会对列表或向量的每个元素应用指定的函数,并返回一个列表

1. 创建示例数据

test <- list(x = matrix( 36:33, 2),             y = matrix( 32:35, 1),             z = matrix( 30:27, 4))test
## $x##      [,1] [,2]## [1,]   36   34## [2,]   35   33## ## $y##      [,1] [,2] [,3] [,4]## [1,]   32   33   34   35## ## $z##      [,1]## [1,]   30## [2,]   29## [3,]   28## [4,]   27

2. 标准用法

对每个矩阵求平均值:

lapply(test,mean)
## $x## [1] 34.5## ## $y## [1] 33.5## ## $z## [1] 28.5

3.2.3 sapply()

sapply 与 lapply 类似,但会尽量将结果简化为向量或矩阵

对每个矩阵求平均值:

sapply(test,mean)
##    x    y    z ## 34.5 33.5 28.5

计算每个元素的维度:

sapply(test,dim)
##      x y z## [1,] 2 1 4## [2,] 2 4 1

3.3 小挑战

如何用for循环批量读入工作目录下的所有数据文件(以.txt格式的文件为例)

这个代码是我自己手搓出来的,大家也可以试试别的思路

names <- list.files(pattern = "\\.txt$", ignore.case = TRUE)data_list <- list()for (i in names)  {  file_name <- names[i]  data_list[[i]] <- read.table(file_name, header = TRUE, sep = "\t")}

4.后记

这一部分的内容相对于之前更加接近实际操作中我们需要去进行的处理:即导入事先编制好的大批量数据。我们不仅学会了经典语法中对数据进行读写和处理的方法,也学会了用其他开发者编写的R包来优化并赋能这个过程。在我的叙述中,我尽量用轻松的语气和类比的方法帮助自己和其他读者理解其中的一些概念和要点,其中或有谬误之处,还请大家包涵亦或是指正,也欢迎大家来交流。

ps.大家可能会发现,这里面的一些代码赋值是用=号,另一些则是用<-号。虽然绝大多数时候不讲究这么多,但是为了规范请尽量采用后者!--观点采自《R语言实战》

Thanks!

By 鼠鼠

最新文章

随机文章

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