构思

关于R语言,我想分三块来写

  • 基础知识汇总。点击这里跳转

  • 常见图形汇总。点击这里跳转

  • 常见统计分析方法汇总。点击这里跳转

写在前面

因为本人也是第一次学习R语言,难免有不足之处,请多多包涵,本文档会及时同步更新,并且添加一些个人想法。

有问题大家可以直接评论或者联系我。当然,回复的前提条件是你有点赞哦!

其实R并不是重点,更不是终点,R比python、c++、java好多了吧?R又不用考试,只需要你解决问题而已。

重点是,你要有思路 ,你需要知道你遇到了什么问题,带着问题去找解决办法。举个例子:

你要处理Excel,那么你要打开吧,你就可以去百度搜R语言如何打开Excel ,你遇到问题可以去解决啊,方法网上很多的。

正确的解决方式:阿龙,我写入csv文件为啥会乱码啊?(哇哦,阿龙又可以处理一个ERROR啦)

错误的解决方式:阿龙,这个作业我不会,你帮我写一下。。。(没有人叫阿龙,除非你给钱❤️ )

特别鸣谢:信息学院杨庆勇老师

参考资料:杨庆勇老师PPT

R语言能干嘛?

说到这里,大部分人就说,画图。还会有部分人说,分析数据。

问题来了:你认为R语言是水课嘛?我以前也认为是,也感觉R语言不重要,但是后面发现,他好好玩。

其实就是老师的问题,跟对人,做对事。人跟错了,做对事就很难了。

首先,R语言不止局限于画图哦,当然他画图是很棒的,至少比python棒很多。

其次,R里面有很多的包,还有很多写好的函数让我们去调用,做数据分析乃至机器学习时很方便,以及后面做检验啊,调用模型啊,都很方便。

我觉得吧,R不是关键,关键的是理论知识,尤其是统计分析的知识,R只是工具,问题才是最根本的,计算机界有句名言:

语言只是工具,问题才是最根本的。

基本操作

R中如何安装包和加载包

1、安装包:命令行输入

install.packages("包的名字")
# 其实还有使用工具安装的,这个命令可以安装大部分包,其他个别的有问题都可以百度到解决方案

2、加载包:命令行或者代码里输入

library(包的名字) #不用写引号哦

查看帮助代码

?solve  # 可以直接使用一个"?"来查看帮助文档
example(solve)  # 使用example()来查看该函数的使用范例
help(solve)  # 查看solve()函数的帮助文档

其他

help.start() # 查看全部帮助文档,或者进入http://127.0.0.1:27003/doc/html/index.html
??solve  # 查看某一确定的关键字内容文档,使用两个问号"??"

输出

print不能指定sep,cat可以

print("我爱帅帅龙");
cat("我爱","帅帅龙",sep="love");

字符串拼接

可指定sep,返回拼接的字符串,非字符串类型自动转化为字符串

a = paste("我爱","帅帅龙",1,"万年")

其他常用操作

ctrl+L  # 清屏
rm(list=ls())  # 清除内存空间
getwd()  # 查看工作目录
setwd()  # 设置临时目录

测试代码

画中国心

library("fun")
library("rgl")demo("ChinaHeart2D")
demo("ChinaHeart3D")

词云

library(wordcloud2)
wordcloud2(demoFreq)
wordcloud2(demoFreqC)

基础语法

赋值

a = 10;# 我个人喜欢这样,新版本兼容很好,大家不用想太多,直接冲就完事了
b <- 10;# 中规中矩的赋值,表示流向,数据流向变量,也可以写成10 -> b

创建不规则向量

不用纠结什么是向量,就当作一个容器,类似python的list

a = c("我","爱","帅帅龙")

创建一定规则的向量

rep就是repeat的意思,就是重复

x <- seq(1, 10, by = 0.5)  # 得到1.0  1.5  2.0  2.5  3.0  3.5  4.0  4.5  5.0  5.5  6.0  6.5  7.0  7.5  8.0  8.5  9.0  9.5 10.0
x <- seq(1, 10, length = 21)  # 从1到10,得到21个等间距数
x <- rep(2:5, 2)  # 得到2 3 4 5 2 3 4 5
x <- rep(2:5, rep(2, 4))  # 得到2 2 3 3 4 4 5 5

创建连续的数字向量

a = c(1:5)  # 可以得到1 2 3 4 5

运算符

其实从这里开始就没啥好看的了,建议别看这一部分了,等遇到问题再搜一下就好了或者再回头看

数值运算符
+  -  *  /
^  # 乘方
%%  # 求余
%/%  # 整除关系运算符
>  <  ==  !=  >=  <=逻辑运算符
&&  ||  !其他运算符
:  # 冒号运算符,用于创建一系列数字的向量。
%in%  # 用于判断元素是否在向量里,返回布尔值,有的话返回 TRUE,没有返回 FALSE。
%*%  # 用于矩阵与它转置的矩阵相乘。

数学函数

常见对一些数学函数有:

函数 说明
sqrt(n) n的平方根
exp(n) 自然常数e的n次方,
log(m,n) n的对数函数,返回n的几次方等于m
log10(m) 相当于log(m,10)

R 中的 round 函数有些情况下可能会"舍掉五"。当取整位是偶数的时候,五也会被舍去

名称 参数模型 含义
round (n) 对 n 四舍五入取整
round (n, m) 对 n 保留 m 位小数四舍五入
ceiling (n) 对 n 向上取整
floor (n) 对 n 向下取整

三角函数

生成大写字母小写字母

a = letters[1:4]  # letters为生成指定范围个小写字母向量。
b = LETTERS[1:4]  # LETTERS为生成指定范围个大写字母向量。

缺失值转为0

x [!is.na(x)]=0

常见常量

  • 26个大写字母LETTERS
  • 26个小写字母letters
  • 月份简写month.abb
  • 月份名称month.name
  • π 值pi

数字与字符串互换

字符串转为数值型

as.integer("12.3")  # 字符串转整数,得到12
as.double("11.666")  # 字符串转小数,得到11.666

数值型转为文本

使用paste()

a = paste(1)  #

formatC() 数值作为字符串输出

formatC(1/3, format = "e", digits = 4)  # digits表示小数点位数
formatC(1/3, format = "f", digits = 4)

as.character()

a=as.character(66)

流程控制

if语句

x <- 50L
if(is.integer(x)) {print("X 是一个整数")
} else {print("X 不是一个整数")
}

switch不做介绍

while循环

a = 1
while(a<5){print('hello')
}

for循环

R语言处理for循环特别吃力,嗯,反正就是吃力,至于为啥我也不知道

a = c([1:4])for(i in a){print(i)
}

repeat循环

repeat的意思就是重复啊

a = 1
sum = 0
repeat{if(sum>10){break  # break终止循环,next继续下一次循环,就好像c++或python的continue}sum=sum+aa=a+1
}
print(sum)

常用数据结构

兄弟萌,进入正题啦!!!

向量:c()

唉,到底啥叫向量呢?其实就可以简单的理解为python的列表,但其实R中有list的实现,就叫list,它可以存放不同类型。

特点:

  • 只能存放一种元素,如果存在数字和字符串,就会自动转为字符串哦
  • 可以试用索引获取元素(索引从1开始)
  • 可以使用切片操作截取一个片段,两端都是闭区间、

创建向量

前面的基础语法已经说过了哦

使用append添加值

good_sample_p <- append(good_sample_p,p)

向量加减乘除运算

有一个好玩的是,向量的循环利用法则,比如a=c(1,2,3),b=c(4,5),这时如果让a+b就会有警告信息,但是它不报错。

以a+b为例:其实就是(1+4,2+5,3+4),现在懂了什么是循环利用了吧

一些常用的函数

  • sqrt(x), log(x), exp(x), sin(x), cos(x), tan(x), abs(x)分别表示平方根, 对数, 指数, 三角函数及绝对值.
  • sort(x, decreasing=FALSE)返回按x的元素从小到大排序的结果向量.
  • order(x)是使得x从小到大排列的元素下标向量
  • sort(x)与x[order(x)]是等效的
  • numeric(n): 表示长度为n的零向量
  • all(log(10 * x) > x):判断一个逻辑向量是否为真值
  • any(log(10 * x) > x): 判断是否有真值
  • is.na(c(1, 2, NA)): 判断x的每一个元素是否是缺失值

逻辑向量

向量可以取逻辑值,如

y <- c(TRUE, TRUE, FALSE)
x = c(1, 4, 6.25)
y = x > 3
# y的值是
[1] FALSE TRUE TRUE

两个向量也可比较

x = c(1, 4, 6.25)
log(10 * x)
[1] 2.302585 3.688879 4.135167
log(10 * x) > x
[1]  TRUE FALSE FALSE
比较运算符:<,<=,>,>=,==(相等),!=(不等)
逻辑向量可以进行与(&)[表示同时满足],或(|)[两者之一]运算.

还可以将逻辑值强制转化为整数值,如:将TRUE变成1,FALSE变成0,

x = c(1, 4, 6.25)c(0, 1)[(x > 3) + 1]  # 下面我会对这句话解释一下
[1] 0 1 1(x>3)+1
[1] 1 2 2

c(0, 1)[(x > 3) + 1]这行代码,我在这里解释一下

(x > 3)会得到逻辑向量[F ,T ,T]

(x>3)+1会将逻辑值强转为整数值得到[1,2,2]

然后用来做前面向量即c(0,1)的索引,得到[0,1,1]

字符向量

就是向量里是字符(这个解释,,是不是很直白?)

a = c("我爱",'帅帅龙')  # 如果同时出现了字符串和数字,数字会转为字符串的哦

paste函数用来把它的自变量连成字符串,中间用相应的分隔符,前面的字符串拼接有介绍嗷,么么哒

复数向量

用的不多,要不咱们就就就就,,,不介绍了吧,嗯好的

向量索引

兄弟萌!快醒醒,这个很重要的!

R中向量的下标从1开始,这与通常的统计或数学软件不一致,C语言、Python等编程语言的向量下标则从0开始!

不要被python带跑了啊,R的负值索引表示删除第几个元素的

x = c(42, 7, 64, 9)
x[2]  # 访问第2个元素
x[3] = -1  # 修改第三个数据的值
x[-4]  # 删除第四个元素
x[x < 10]  # 表示选取x<10的元素
x[c(1, 4)]  # 向量索引,是不是很神奇?

定义向量时可以给元素加上名字

ages <- c(Li = 23, Zhang = 33, Wang = 45)
# ages为
Li   Zhang  Wang
23    33         45
# 访问时可以用通常的方法,还可以用元素名访问
ages["Zhang"]
# 还可以定义向量后,再后加上名字
age1 = c(21, 34, 56)
names(age1) = c("Zhang", "Ding", "Liu")

矩阵:matrix

matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL)

  • data是矩阵的数据,通常为向量
  • nrow为行数,ncol为列数
  • byrow 为TRUE时,是横着的1,2,3,4,否则变成竖着的1,2,3了

创建矩阵

matrix(1:12,ncol=4,byrow=TRUE)
# 得到的数据[,1] [,2] [,3] [,4]
[1,]    1    2    3    4
[2,]    5    6    7    8
[3,]    9   10   11   12

常用函数

  • head(a,10) 查看矩阵前10行

  • tail(a,10) 查看矩阵后十行

  • cbind(): 进行上下合并

  • rbind(): 进行左右合并

  • c(A): 显示A的所有向量,是按列拉直的向量

  • det(A): 求行列式的值

  • solve(A): 求逆

  • eigen(A): 特征值和特征向量

B=rbind(c(1,2),c(3,4))
C=cbind(c(11,12),c(13,14))
D=rbind(B,C)
E=cbind(B,C)

矩阵运算

类似于向量的加减乘除

参与运算一般是相同形状的,形状不一致的向量和矩阵也可进行四则运算。规则是矩阵的数据按向量(按列拉直)的对应元素进行运算。

访问矩阵元素和子矩阵

  • A[2,3]#访问是矩阵的(2,3)元素7
  • A[i,]#访问第i行,A[,j] #访问第j列
  • A[,c(1,2,3)]前三列
  • A[,c(‘name1’,‘name2’)]指定列名

对矩阵的行标和列标重新命名。

rownames(A)  <- c("a", "b", "c")
colnames(A) <- paste("X", 1:4, sep="")

apply函数

对矩阵想对某行(列)进行某种计算,可用apply函数:apply(x, margin, fun, …)

x表示矩阵,margin=1表示对每行计算,margin=2表示对每列计算,fun是用来计算的函数。

apply(A, 1, sum)
apply(A, 2, mean)

因子:factor

factor(x, levels = sort(unique(x), na.last = TRUE), labels, exclude = NA, ordered = FALSE)

用来把一个向量编码为一个因子

创建因子

sex = c("M","F","M","M","F")
sexf = factor(sex);sexf

常用函数

  • is.factor()检验对象是否是因子
  • as.factor()把向量转化为因子
  • levels(x)可以得到因子的水平
  • table(x)统计各类数据的频数

tapply()函数

tapply(x, INDEX, FUN=NULL,…,simplify=TRUE)

  • x是一对象,通常为一向量
  • INDEX是与X有同样长度的因子
  • FUN是要计算的函数

知道5位学生的性别,还知道这5位学生的身高,分组求身高的平均值

sex = c("M","F","M","M","F")
height = c(174, 165, 180, 171, 160)
tapply(height, sex, mean)

gl()函数

gl(n, k, length = n*k, labels = seq_len(n), ordered = FALSE)

gl()可以用来方便地产生因子

  • n为水平数
  • k为重复的次数
  • length为结果的长度
  • labels为n维向量,表示因子水平
  • ordered是逻辑变量,表示是否为有序因子,缺省值FALSE

列表:list

创建列表

rec <- list(name="黎明", age=30, scores=c(85,76,90));rec
# 得到的数据
$name
[1] "黎明"$age
[1] 30$scores
[1] 85 76 90

列表的引用与修改

列表元素可用"列表名[[下标]]" 引用,列表不同于向量,每次只能引用一个元素,如rec[[1:2]]是不允许的

rec <- list(name="黎明", age=30, scores=c(85,76,90));rec
rec[[2]]  # 得到30
rec[[3]][2]  # 得到第三个元素的第二个元素,即76
# 若指定了元素的名字,则引用列表元素还可以用它的名字作为下标,
rec$age
rec[["age"]]
rec[[2]]=11  # 把30修改为11

注意:"列表名[下标]"或"列表名[下标范围]"的用法是允许的,但与前面的含义不同,它还是一个列表

数据框:data.frame

重重重点

数据框通常是矩阵形式的数据,但矩阵各列可以是不同类型。数据框每列是一个变量,每行是一个观测。

这个和python的pandas里面的DataFrame是类似的哦。

生成数据框

d = data.frame(name=c('黎明','周杰伦','刘德华'),age=c(30,35,28),height=c(180,175,173))
# d的值name age height
1   黎明  30    180
2 周杰伦  35    175
3 刘德华  28    173

as.data.frame(list)可以将列表转为data.frame(),因为列表不是可以指定名称嘛

数据框的引用

d = data.frame(name=c('黎明','周杰伦','刘德华'),age=c(30,35,28),height=c(180,175,173))
d[1:2, 2:3]  # 得到前两行,2,3列的数据
d[["age"]]  # 获取age这一列的数据
# 等价于
d$height  # 获取height这一列的数据
rownames(d) = c("one", "two", "three")  # 各行也可以定义名字,指定index

修改值

d$name[1] = "我爱你"  #将name的第一个值修改为我爱你   常用
d[1,2] = "女"  #将第1行第2列的值修改为“女”   常用
d[[1]][2] = "我爱你"  #将第一列第二个值改为“我爱你”

添加删除行列

d = df1[-2,] #删除第2行数据
d = df1[,-3] #删除第3列的数据
d = df1[-c(1,3),] #删除第1行和第3行的数据
d$r = age/weight  # 添加列r

attach()函数

R提供了函数attach()可以把变量调入内存。就是像咱们的d$height或d[[“age”]],就不用这样写了,直接写age就好了,是不是很爽。

d = data.frame(name=c('黎明','周杰伦','刘德华'),age=c(30,35,28),height=c(180,175,173))
attach(d)
r <- age/height  # /对r进行修改不会影响d的数据
# r的值
[1] 0.1666667 0.2000000 0.1618497
detach(d) #取消连接

merge()

把多个数据框合并成一个数据框

merge(data1, data2, by='ID')

异常处理tryCatch()

就像大多数编程语言一样,这里就不多说了,需要了解的是还有个东西叫withCallingHandlers()

withCallingHandlers() 是tryCatch()的变体,只是运行的上下文条件不同,它使用的情况很少,但是非常有用。

数据的读取与保存

读取txt:read.table()

read.table(“filename.txt”)

读取xlsx:read.xlsx()

要先先安装xlsx包,然后导入xlsx包

data <- read.xlsx(“filename.xlsx”,n)

保存csv:write.csv()

write.csv(data,file = “文件名”)

保存 xlsx:write.xlsx()

write.xlsx(data, “data.xlsx”,sheet.name=“sheet1”)

保存R中为图片、pdf文件

以png为例

png(file="myplot.png", bg="transparent")  #文件不指定地址,默认放在getwd()里了# 这里写你的画图程序#dev.off()  # 记得off# 下面是一个实例
png(file="myplot.png")
plot(1:10)
rect(1, 5, 3, 7)
dev.off()

保存为jpeg、pdf就把png换一下就好了

R的一些常用函数

兄弟萌,做好准备,先把这几个记住,咱们要准备开始画图和分析统计了

名词解释

平均值、中位数、众数

不是吧不是吧,不会真的有人不知道这三个词代表啥意思吧。。。

方差

方差(样本方差)是每个样本值与全体样本值的平均数之差的平方值的平均数

标准差

我们默认使用总体标准差,就是方差开平方

正态分布

正态曲线呈钟型,两头低,中间高,左右对称因其曲线呈钟形,因此人们又经常称之为钟形曲线。

若随机变量X服从一个数学期望为μ、方差为σ^2的正态分布,记为N(μ,σ^2)。(期望就是Σxn*pn,xn表示频数,pn表示概率)

其概率密度函数为正态分布的期望值μ决定了其位置,其标准差σ决定了分布的幅度。当μ = 0,σ = 1时的正态分布是标准正态分布。

关于正态分布的意义,大家可以点击这里参考

mean:获取均值

a=c(1:6)
mean(a)

median:获取中位数

a=c(1:6)
median(a)

获取众数

R语言中没有专门的函数获取众数,因此要手写

# 创建函数
getmode = function(v) {uniqv = unique(v)  # unique主要是返回一个把重复元素或行给删除的向量、数据框或数组uniqv[which.max(tabulate(match(v, uniqv)))]
}# 创建向量
v = c(2,1,2,3,1,2,3,4,1,5,5,3,2,3)# 调用函数
result = getmode(v)
print(result)

quantile():百分位数,默认为5个

a=c(1:6)
quantile(a)
# 得到的结果
> quantile(a)0%  25%  50%  75% 100%
1.00 2.25 3.50 4.75 6.00

summary():描述统计量

summary():获取描述性统计量,可以提供最小值、最大值、四分位数和数值型变量的均值,以及因子向量和逻辑型向量的频数统计等。

结果解读如下:

a=c(1:6)
summary(a)
# 得到的结果
> summary(a)Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 1.00    2.25    3.50    3.50    4.75    6.00

var():计算方差

a = c(1:5)
var(a)

sd():标准差

a = c(1:5)
sd(a)

变异系数

方差除以平均值

当需要比较两组数据离散程度大小的时候,如果两组数据的测量尺度相差太大,或者数据量纲的不同,直接使用标准差来进行比较不合适,可以使用变异系数

sort、order:排序、指定排序规则

x = c(1,7,5,4,4,6,9)
x = sort(x,decreasing=FALSE)  # 返回升序排列结果,当decreasing为TRUE时为降序排列
# 或者
x_order = order(x,decreasing=FALSE)  # 返回升序后的下标, decreasing为TRUE时为降序排列
x = x[x_order]

要对一个矩阵x进行排序,先根据第一列升序排列,然后根据第二列升序排序,可以用下面的语句实现:

x[order(x[,1],x[,2]),]

注:降序的话加上decreasing参数即可。

处理缺失值

对于NA值来说,有些计算会保存,我们需要忽略NA,加上下面的参数即可:na.rm=TRUE,例如

mean(height,na.rm=TRUE)
[1] 5.855

cor():计算两个变量之间的相关系数(可略)

cor(height,log(height))

cov():两个变量之间的协方差(可略)

cov(height,log(height))

shapiro.test():判断数据是否满足正态分布

一般情况下,当返回的p-value大于0.05时表示满足。

当然有特殊情况,哈哈,因为大多数科研情况下0.05不严谨,可能会指定为0.01,题目没指定alpha就默认为0.05就可以了哦

R语言——基础知识呕心沥血大汇总相关推荐

  1. R语言基础知识-学习笔记汇总

    B站课程:生信必备技巧之R语言基础教程全集的代码笔记 1.R语言包安装 rm(list = ls()) # 设置镜像: options()$repos options()$BioC_mirror #o ...

  2. R语言基础知识详解及概括

    R语言基础知识详解及概括 目录 R语言基础知识详解及概括 R数据可视化示例 R语言进行数据创建

  3. R语言基础知识入门学习(一)

    目录 系列文章目录 一.软件下载 二.基本知识 1. 对象 2. 向量 3. 向量化 4. 因子 总结 系列文章目录 R语言基础知识入门学习(一) 一.软件下载 我们可以通过这个网址对R语言软件进行下 ...

  4. R语言基础知识(1)-数据类型及其常用方法

    转载请注明出处:https://blog.csdn.net/xiezhiliang22 1 R语言数据类型 总体的数据类型分为4类,数据框,列表,矩阵,数组. 2 数据框 构造数据框 x <- ...

  5. R语言 如何搭建和操作R语言数据框 R语言基础知识rbind,cbind,merge和str用法

    数据框是一种特殊的数据结构,它通常用来存储数据表格或电子表格形式的数据.数据框中的毎一列代表一个特定的属性或字段,而行由这些列的具体取值组成.这种数据结构在处理有大量字段和属性的数据集时十分有用. 建 ...

  6. c++语言基础知识,c++语言基础知识汇总.ppt

    <c++语言基础知识汇总.ppt>由会员分享,可在线阅读,更多相关<c++语言基础知识汇总.ppt(68页珍藏版)>请在人人文库网上搜索. 1.1,第二章 C+语言初步,本章主 ...

  7. C语言中的标识符以字母或下划线开头,牛逼大神整理的C语言基础知识,你确定你不码下来?...

    [[怪兽爱C语言]牛逼大神整理的C语言基础知识,你确定你不码下来?]https://toutiao.com/group/6577344220355363341/?iid=15906422033& ...

  8. 计算机二级c语言公共基础知识重点,计算机二级C语言公共基础知识与考点汇总...

    计算机二级C语言公共基础知识与考点汇总 计算机二级公共基础知识总结 计算机二级公共基础知识总结 第一章 数据结构与算法 1.1 算法 算法是指解题方案的准确而完整的描述. 算法的基本特征:是一组严谨地 ...

  9. R语言基础入门(全)

    R 是门语言,也是个环境.个人认为R有点像matlab. R自带多种统计学及数字分析功能.R的功能也可以通过安装包(Packages,用户撰写的功能)增强,个人感觉这个就是插件.因为S的血缘,R比其他 ...

  10. R语言基础入门(学习笔记通俗易懂版)

    文章目录 R语言预备知识 获取工作目录 设置工作目录 注释 变量名的命名 赋值 变量的显示 查看与清除变量 函数帮助文档查询 函数 安装R包 文件的读取 文件的输出 软件的退出与保存 R语言语法 向量 ...

最新文章

  1. php for等边三角形,利用js实现等腰三角形
  2. 非计算机专业自学1年拿到算法offer的总结(附学习路线)
  3. 谷歌开源预训练新范式BiT,准确率提高近25%!网友评价:CV界的BERT
  4. 在Gridview控件中根据Field Name来取得对应列索引
  5. 在多核CPU上安装SQL SERVER 2005注意
  6. [转]只让指定的机器连接SQLServer服务器
  7. [mmu/cache]-ARM cache的学习笔记-一篇就够了
  8. android 读取 网页,Android读取网页内容
  9. eclipse打包项目为aar_新生日常牢骚之作业打包
  10. Bootstrap Bootstrap表格插件bootstrap-table配置与应用小结
  11. 手摸手-100行代码实现一个功能完善的图片懒加载
  12. Python 如何检测敏感词汇
  13. android常用地图坐标转换
  14. visio 如何让箭头完全水平?
  15. android 清理后自动重启,解决Android后台清理APP后,程序自动重启的问题
  16. 《从0开始做运营》(有感)
  17. 用DTM实现网页转化跟踪,广告投放效果实时监测
  18. 低代码时代的团队分工有哪些?
  19. Excel数据透视表经典教程六《报表布局》
  20. CPA十三--借款费用的内容(转载)

热门文章

  1. 几种物流仿真软件的比较
  2. 华为交换机通用配置方式方法
  3. linux(Ubuntu)系统解决校园网锐捷客户端联网问题
  4. ESP8266之ESP8266WebServer库学习
  5. JS函数创建的几种方式
  6. linux下svn安装与版本控制
  7. H5小游戏源码/王了个王消消乐游戏源码带后台
  8. 2022谷粒学院BUG记录
  9. MAC安装Mysql超详细完整教程
  10. java opencv 之人脸识别