类型确定 typeof()
在函数对象上调用typeof会报告” closure ”
类型转换 as.logical()
as.numeric() as.character()
TRUE →→1,
FALSE →→0,
NA →→ NA_real_
反过来同理,除0外其他数均视为TRUE
c() #创建一组数值向量
## NULL
c(1, c(2, NA_real_, 4), 5, c(6, c(7, Inf))) #Inf表示无穷大,NaN表示非数值
## [1] 1 2 NA 4 5 6 7 Inf
x<-c(1,3,4,5)
rep(x,times=2)
## [1] 1 3 4 5 1 3 4 5
rep(c(2,1),length.out=4,each=2) #times为x重复次数,each为x中每个元素重复次数,length.out为结果长度(可能出现回收不完全情况)
## [1] 2 2 1 1
seq(from=1,to=5,by=1)#创建等差数列
## [1] 1 2 3 4 5
seq_along(x)#输出从 1 到 x 长度的整数序列
## [1] 1 2 3 4
seq_len(3)#生成从 1 到指定数字 (n) 的整数序列
## [1] 1 2 3
随机数的生成
runif(7)
## [1] 0.04065684 0.22865549 0.21371565 0.16074904 0.10387857 0.90130973 0.83828246
#生成7个随机的单位间隔内均匀分布
rnorm(1)
## [1] -1.330123
#生成1个标准正态分布
sample(0:1, 20, replace=TRUE, prob=c(0.9, 0.1)) #replace即有无放回(重复与否),prob即 使得p(X=0)=0.9
## [1] 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
可以通过设置种子来重现结果,只要下次生成随机数前设置之前使用过的种子
set.seed(12345)
sample(1:10, 5, replace=TRUE)
## [1] 3 10 8 10 8
平均值mean()
方差var()
标准差sd()
中位数median()
绝对值abs(c(2,-1,-3,0))
平方sqrt(c(2,4,3,1))
求最小值/最大值
单个最小值min()
跨多个向量逐个元素比较值pmin()
累积最小值cummin()
累积最大值cummax()
求和
向量中元素总和sum()
向量中元素的累计和cumsum()
diff()可看作cumsum的逆
向量中所有元素的乘积prod()
向量中元素的累计乘积cumprod()
cummin(c(3, 2, 4, 5, 1, 6, 0))
## [1] 3 2 2 2 1 1 0
pmin(c(1, 2, 3, 4), c(4, 2, 3, 1))
## [1] 1 2 3 1
min(c(1,3,4,5),c(0,-4,2,5,6))
## [1] -4
diff(c(-2,3,6,2))
## [1] 5 3 -4
四舍五入
取最近的小值 floor()
取最近的大值ceiling()
四舍五入round()
向0靠近trunc()
指数函数
exp()
对数函数
log()
概率分布
连续分布
均匀分布:unif
正态分布:norm
指数:exp
卡方分布:chisp
Γ分布:gamma
β:beta
f分布:f
对数正态:lnorm
前缀:d(概率密度函数)/p(分布函数)/q(分位数函数)/r(产生随机偏差)
离散分布
二项式:binom
几何:geom
泊松:pois
超几何:hyper
负二项式:nbinom
` %/% ` (整数除法)和 ` %% ` (模数,除法余数)
is.na(c(NA_real_, Inf, -Inf, NaN, -1, 0, 1,NA))
## [1] TRUE FALSE FALSE TRUE FALSE FALSE FALSE TRUE
na. omit,其主要目的是从原子向量中去除缺失值,从而得到结果
which(x) 得到不含缺失值的结果
NA | TRUE=TRUE
NA | FALSE=NA
利用sum/mean,求符合条件的值的数目/比例
x<-runif(30)
sum(x>=0.5)
## [1] 13
mean(x>=0.5)
## [1] 0.4333333
ifelse函数是标量if … else条件语句的向量化版本
ifelse(x>=y,x,y)
\"输入双引号,
\'输入单引号,
\\输入一条反斜杠,
\n换行
\b删除最后一个
\t植入制表符(前进到下一个制表位,例如四个或八个文本列的倍数),
\r注入回车符(移至当前行的开头)这意味着后续字符将覆盖当前行内容
print函数中转义符无效
cat函数遵循以上转义符的特殊含义
连接两个或多个字符向量的相应元素paste(x,y,sep)
聚合为一个字符串 paste(x,collapse)
‘==’
match(x,y) 返回x元素在y中对应元素位置,不存在则返回NA
%in%返回逻辑向量
c("spam", "spam", "bacon", "eggs") %in% c("spam", "eggs")
## [1] TRUE TRUE FALSE TRUEcharmatch(x,y) 返回x元素在y中对应元素位置,不存在则返回NA。返回值存在条件是x是y的子集。0表示模棱两可
startsWith(x,y)
返回逻辑向量,返回true的条件是y是x的子集
grepl("spam",c("spam", "y spammite spam", "yummy SPAM", "sram"), fixed=TRUE) #fixed=TRUE意味着固定模式
## [1] TRUE TRUE FALSE FALSE
agrepl("spam",c("spam", "y spammite spam", "yummy SPAM", "sram"))#近似匹配
## [1] TRUE TRUE FALSE TRUE
正则表达式(grepl参数中perl=TRUE)
一、限定符
a* 出现0/多次
a+ 出现1/多次
a? 出现0/1次
a{n} 出现n次,n=1,2…
二、字符类
[abc]匹配a或者b或者c
{a-c]同上
[a-fA-F0-9]匹配小写大写和数字
[^0-9]匹配除0-9外的所有
三、元字符
\d匹配数字
\w匹配单词(英文数字下划线)
\s匹配空白符(包括换行符、Tab).
\b标注字符的边界
^匹配行首
$匹配行尾
四、
<.+>贪婪匹配任意
<.+?>懒惰匹配任意
regexpr(x,y,fixed=TRUE)在每个字符串中查找指定字符的第一次出现,不出现返回-1
当使用正则表达式搜索指定字符位置时,使用gregexpr(x,y,perl=TRUE)
使用完gregexpr得到位置后,可用regmatches(x,``gregexpr(x,y,perl=TRUE),perl=TRUE) 提取匹配的子字符串
(以上均返回列表)
提取子字符串还可以用substring(x,1,4)
提取位置从1到4的字符串
sub和gsub分别替换模式中的第一个匹配项和所有匹配项
sub("a","b",x,fixed=TRUE) 将x中的第一个a换成b
gsub("a","b",x,fixed=TRUE)
strsplit(x,"a",fixed=TRUE) 以字符a为分割
tolower小写←大写
toupper小写→大写
chartr(old,new,x)
list()
打印:str()
转换:as.list()
展开:unlist()
NULL可作为占位符
Null不等同于NA。前者不能放置在原子向量中且无价值
list(NULL, NULL, month.abb)
## [[1]]
## NULL
##
## [[2]]
## NULL
##
## [[3]]
## [1] "Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov" "Dec"
length(NULL)
## [1] 0
测试:is.null()
引入:
structrue(x,attribute1="abcd",attribute2=c(1,2,3,4))
x <- structure(
1:8, # the object to be equipped with attributes
attribute1="value1",
attribute2=c(6, 100, 324)
)
print(x)
## [1] 1 2 3 4 5 6 7 8
## attr(,"attribute1")
## [1] "value1"
## attr(,"attribute2")
## [1] 6 100 324
attr(x, "attribute1")
## [1] "value1"
attributes(x)
## $attribute1
## [1] "value1"
##
## $attribute2
## [1] 6 100 324
特殊属性:
names,row.names,dimnames(赋值NULL给row.names会将此属性重置为最常见的连续自然数情况)
dim
levels
class, eg.data frame,character…
可通过指定函数访问,如names() class()
dim()
不能被赋予任意值
(x <- structure(c(13, 2, 6), names=c("spam", "sausage", "celery")))
## spam sausage celery
## 13 2 6
names(x)
## [1] "spam" "sausage" "celery"
修改和删除:
`dimnames<-`(A, list(c("a", "b", "c"),c("x", "y", "z", "w")))
attr(x, "attribute1") <-NULL
x
## spam sausage celery
## 13 2 6
structure(1:6, dim=c(2, 3))
## [,1] [,2] [,3]
## [1,] 1 3 5
## [2,] 2 4 6
matrix(1:6, byrow=TRUE, nrow=2,dimnames=list(c("x", "y"), c("a", "b", "c")))
## a b c
## x 1 2 3
## y 4 5 6
array(1:6, dim=c(2, 3))
## [,1] [,2] [,3]
## [1,] 1 3 5
## [2,] 2 4 6
as.matrix(1:2)
## [,1]
## [1,] 1
## [2,] 2
cbind(1:2)
## [,1]
## [1,] 1
## [2,] 2
t(1:3)#转置
## [,1] [,2] [,3]
## [1,] 1 2 3
rbind(1:3)#如果参数中存在一个数据框,则得到数据框。或直接引用cbind.data.frame 和rbind.data.frame
## [,1] [,2] [,3]
## [1,] 1 2 3
simplify2array为unlist扩展,list内长度不同无法转换
simplify2array(list(1, 11, 21))
## [1] 1 11 21
simplify2array(list(1:3, 11:13, 21:23, 31:33))
## [,1] [,2] [,3] [,4]
## [1,] 1 11 21 31
## [2,] 2 12 22 32
## [3,] 3 13 23 33
table(x[["row.names"]])
a<-c(2, 4, 6, 2, 2, 2, 3, 6, 6, 3)
tabulate(a)
## [1] 0 4 2 1 0 3
aperm(a,perm,resize=TRUE)
perm: 指定新维度的排列顺序的整数向量。例如,如果
a 是一个三维数组,perm 可以是
c(2, 1, 3) 之类的。
resize: 一个逻辑值,默认为 TRUE。如果为
TRUE,结果会被调整为适应新维度。
和t()区别是一个可以处理多维数组,一个处理矩阵矩阵运算
对角阵diag(x)
求解线性方程组solve(x,y)
x为方程组系数矩阵,y为结果矩阵
矩阵的逆 solve(x)
矩阵行平均rowMeans()
矩阵列平均colMeans()
和同理;
计算矩阵x行间距离dist(x)
矩阵乘法 %*%
数组外积%o%
汇总矩阵中的各个行或列
apply(x,2,fun)
sapply(x,fun,...)
lapply(x,fun,...)
sapply()
简化了输出。如果结果是相同长度的向量列表,则返回一个矩阵。如果结果是单个值的列表,则返回一个向量。
lapply()
始终返回一个列表,而不管所应用的函数的输入或结果如何
data.frame(
a=c(TRUE, FALSE),
b=1:6,
c=runif(6),
d=c("spam", "spam", "eggs")
)
## a b c d
## 1 TRUE 1 0.42919882 spam
## 2 FALSE 2 0.92727397 spam
## 3 TRUE 3 0.77324322 eggs
## 4 FALSE 4 0.25968125 spam
## 5 TRUE 5 0.32122467 spam
## 6 FALSE 6 0.06019516 eggs
一些与数据框相关的函数会自动将字符向量转换为因子,由参数stringsAsFactors控制
order() 得到
a<-c(3,1,4,2,5)
o<-order(a) #[1]2 4 1 3 5
a[o]
## [1] 1 2 3 4 5
sort()
得到排序好的结果
range() 返回给定参数的最小值和最大值
range(a)
## [1] 1 5
如参数中含有因子或日期字符串等,运用xtfrm()
转换为数值
duplicated() 得到重复行
unique() 删除重复行
merge(x,y)
as.data.frame.table:
A <- matrix(round(runif(6), 2), nrow=3,
dimnames=list(
c("X", "Y", "Z"), # row labels
c("u", "v") # column labels
))
names(dimnames(A)) <- c("Row", "Col")
print(A)
## Col
## Row u v
## X 0.04 0.96
## Y 0.06 0.83
## Z 0.63 0.32
as.data.frame.table(A, responseName="Val", stringsAsFactors=FALSE)
## Row Col Val
## 1 X u 0.04
## 2 Y u 0.06
## 3 Z u 0.63
## 4 X v 0.96
## 5 Y v 0.83
## 6 Z v 0.32
reshape():还没掌握,既可重塑也可拆栈(逆向操作)
split()根据两个因子类序列的组合进行分区。不存在的水平对 会导致数据框为空
x <- data.frame(
a=c( 10, 20, 30, 40, 50),
u=c("spam", "spam", "eggs", "spam", "eggs"),
v=c( 1, 2, 1, 1, 1)
)
split(x, x["u"])
## $eggs
## a u v
## 3 30 eggs 1
## 5 50 eggs 1
##
## $spam
## a u v
## 1 10 spam 1
## 2 20 spam 2
## 4 40 spam 1
sapply()聚合分组的数字数据
sapply(split(iris[1:2], iris[5]), sapply, mean)
## setosa versicolor virginica
## Sepal.Length 5.006 5.936 6.588
## Sepal.Width 3.428 2.770 2.974
aggregate(x,by,FUN)对数据框中的所有列应用单个函数。第二个参数by必须是列表形式(包括数据框),作为数据拆分依据的分组变量
1.修改
df<-data.frame(Name=c("jenny","susan","casio"),age=c(18,20,22))
transform(df,age=age+1)
## Name age
## 1 jenny 19
## 2 susan 21
## 3 casio 23
2.增加
transform(df,birthyear=2024-age)
## Name age birthyear
## 1 jenny 18 2006
## 2 susan 20 2004
## 3 casio 22 2002
within(df,birthday<-c("0601","0701","0801"))
## Name age birthday
## 1 jenny 18 0601
## 2 susan 20 0701
## 3 casio 22 0801
Re(x) 复数的实部
Im(x) 复数的虚部
Mod(x) 绝对值(模)
Arg(x) 复数角度
conj(x) 共轭复数
convolve() 卷积(补课学习)
fft() 对array快速傅里叶变化
mvfft() 矩阵各列的快速傅里叶变化
1.par(mar=...):调整绘图边距。mar
参数指定绘图底部、左侧、顶部和右侧的边距行数。
多图情况下par(mfrow=c)
2.plot.new()
plot.windows(xlim,ylim,asp=1,xaxs,yaxs) 指定 x 和 y 范围以及纵横比
x轴y轴默认情况下在每个方向上延长4%(xaxs=“r”)
xaxs=“i”时x轴y轴不延长
3.(1)point(x,y,col,pch)
(2)lines(x,y,type)
(3)text(position1,position2,c("character1","character2"),col="red")
(4)rasterImage(matrix,interpolate=TRUE)
interpolate平滑颜色过渡
(5)polygon(x,y,lty,col,border)
(6)image(x,y,z,col)rasterImage的便捷版本,可轮廓图、二维直方图、热图
plot(x,y,type)通用的基础函数,用于创建各种绘图和图表,包括散点图、折线图等。
palette() 函数用于查看或设置当前调色板。R
中的调色板是一组颜色
调整颜色透明度:
adjust_transparency <- function(col, alpha)
rgb(t(col2rgb(col)/255), alpha=alpha)
col2rgb(col):此功能将颜色col转换为其 RGB
分量(红、绿、蓝)。它返回一个矩阵,其中每行对应于颜色的 RGB 值。
rgb 函数创建具有指定 RGB 值的颜色,alpha
参数设置透明度。
多边形边界的线型。默认值为 solid
lwd线宽
4.text("character",pos,offset,adj,srt)
pos:标签位置;cex大小;srt文本旋转;offset距离
5.使用box在绘图或图形区域周围绘制矩形
6.使用axis(side,at=seq(2,10,by=2),labels,col,lwd...)添加两个轴上的刻度标签等
side:1x轴 2y轴 3顶部 4右边
at指定刻度的位置
7.使用 title(main,sub,xlab,ylab)添加xy轴的名称
直方图创建:hist(data,breaks)
breaks条柱数
条形图创建:barplot(values)
8.legend("position",legend=levels(x),bg="white")
do.call(fun,x)
用于调用列表中指定参数的函数,输出取决于被调用的函数,不一定是列表
Map()
将函数应用于多个列表或向量的相应元素。它返回一个列表
Reduce()
filter()