5 + (2.3 - 1.125)*3.2/1.1 + 1.23E3
[1] 1238.418
R是一款用于统计、数据可视化的语言和环境。R是一个自由、免费、源代码开放的软件。是一个由统计计算和统计制图优秀的工具。
本书所使用的是quarto
来实现的编译。关于这个的更多详细的内容可以参阅https://quarto.org/
5 + (2.3 - 1.125)*3.2/1.1 + 1.23E3
[1] 1238.418
3^3
[1] 27
sqrt(10)
[1] 3.162278
sqrt(16)
[1] 4
asin(1)
[1] 1.570796
sin(pi/2)
[1] 1
dnorm(2,mean=0,sd=1) #parameter=x,mean=,sd=
[1] 0.05399097
pnorm(10,1,1)
[1] 1
<- c(10, 6, 4, 7, 8)
marks <- c(1:3, 10:13)
x <- c(1, 2)
x1 <- c(3, 4)
x2 <- c(x1, x2)
x x
[1] 1 2 3 4
5%%3 #求余数
[1] 2
sqrt(-1)
Warning in sqrt(-1): NaNs produced
[1] NaN
sqrt(-1+0i)
[1] 0+1i
<-(log10(15)<2);
saleprint(sale)
[1] TRUE
c(1,2,3)>2
[1] FALSE FALSE TRUE
1:4>=(4:1)
[1] FALSE FALSE TRUE TRUE
%in%
是一个较为特殊的运算,x%in%y
表示的是把向量y看作一个集合,运算的结果返回的是一个向量。
c(1,3)%in% c(2,3,4)
[1] FALSE TRUE
which()
函数返回真值对应的下标。
which(c(FALSE,TRUE,FALSE,TRUE))
[1] 2 4
对于一个真-假向量,只能输入这两类,输入数值型会发生报错。
identical(x,y
对两个R对象进行比较,需要确定x
和y
之间完全相同与否。比如在向量/矩阵中若一个元素不完全相同,则实际是不同的。
=1;y=1
xidentical(x,y)
[1] TRUE
identical(c(NA,1,2),c(NA,2,2))
[1] FALSE
=matrix(1:9,nrow = 3,ncol = 3)
X=matrix(1:9,nrow = 3,ncol = 3)
Yidentical(X,Y)
[1] TRUE
=matrix(c(1,2,3,4,5,6,7,8,8),3,3)
Y2identical(X,Y2)
[1] FALSE
all.equal()
与identical()
类似,但比较时候不区分数据类型。
all.equal(c(1,2,3),c(1,2,NA))
[1] "'is.NA' value mismatch: 1 in current 0 in target"
all.equal(c(1L,2L,3L), c(1,2,3))
[1] TRUE
duplicated()
返回是是否在集合(向量)中为重复值,是否为重复值,是根据前面的进行遍历得到,若之前的数据已经检测append
进入队列,再进入就是重复值。因此未出现返回FALSE
,之前已经出现则TRUE
。
<- c('abc', 's', 'a cat', NA, '李明') s1
paste()
是用于连接两个字符型向量,元素可以一一对应的连接;对于数值与字符型时候,采用的是一对多的形式进行连接,自动将数值型向量转换为字符型。
paste("x",1:3)
[1] "x 1" "x 2" "x 3"
paste(c("ab", "cd"), c("ef", "gh"))
[1] "ab ef" "cd gh"
在这里的向量下标不同于python
的数组下标,第一个元素的下标用x[1]
取出,同样不同的:python用x[-1]
取出最后一个元素;而R用x[-1]
所取的是除去x[1]
之后的元素全部取出。 R的实现:
<-c(1,5,10,20,25)
x-1] x[
[1] 5 10 20 25
x[]
表示的是全部取出作为子集,但这与x
本身并不相同:
<- c(1,20,50,100)
x >30] x[x
[1] 50 100
which()
which()
可用于找到想要的下标。
<- c(3, 4, 3, 5, 7, 5, 9)
x which(x > 5)
[1] 5 7
向量的命名方式
<- c("age"=11,"gender"=0)
attr names(attr)
[1] "age" "gender"
eigen(A)
可用于计算特征值和对应的特征向量。
library(Matrix)
=matrix(c(1,3,2,1,9,2,4,8,1), nrow = 3, ncol = 3)
Aeigen(A)
eigen() decomposition
$values
[1] 11.378681 -2.119875 1.741194
$vectors
[,1] [,2] [,3]
[1,] -0.1768558 -0.7291364 -0.7283130
[2,] -0.9595649 -0.2590188 0.6207838
[3,] -0.2189914 0.6334583 -0.2901513
而det()
是用于计算determinant矩阵行列式;solve()
用于计算矩阵的逆。
det(A)
[1] -42
solve(A)%*%A
[,1] [,2] [,3]
[1,] 1.000000e+00 -2.220446e-16 -1.110223e-16
[2,] -2.775558e-17 1.000000e+00 6.938894e-17
[3,] 0.000000e+00 0.000000e+00 1.000000e+00
qr()
是利用QR分解来得到上三角和下三角,同时还可以获得矩阵的秩。
qr(A)$qr
[,1] [,2] [,3]
[1,] -3.7416574 -8.5523597 -8.017837
[2,] 0.8017837 -3.5856858 -2.629503
[3,] 0.5345225 -0.5658953 -3.130495
qr(A)$rank # or qr.default(A)$rank
[1] 3
sum(diag(A))
[1] 11
2^A
[,1] [,2] [,3]
[1,] 2 2 16
[2,] 8 512 256
[3,] 4 4 2
expm(A)
3 x 3 Matrix of class "dgeMatrix"
[,1] [,2] [,3]
[1,] 5842.413 12351.36 11775.15
[2,] 31678.323 67023.00 63868.46
[3,] 7231.512 15295.15 14578.02
diag(rep(3))
[,1] [,2] [,3]
[1,] 1 0 0
[2,] 0 1 0
[3,] 0 0 1
rep(1,3) %o% rep(1,3)
[,1] [,2] [,3]
[1,] 1 1 1
[2,] 1 1 1
[3,] 1 1 1
diag(A)
[1] 1 9 1
diag(diag(A))
[,1] [,2] [,3]
[1,] 1 0 0
[2,] 0 9 0
[3,] 0 0 1
colsums
计算矩阵的列和,返回值为列的和,与所取矩阵及其范围相关
rowsums
计算的是矩阵的各行的和;
colMeans(A)
求各行的均值
rowSums()
# 对于多列的进行求和; sum()
rowSums(A)
[1] 6 20 5
sum(A)
[1] 31
在任何的编程语言中,函数是一个重要的组成部分,而不同的编程语言的函数输入方法并不相同。
formal()
,即函数的形式参数表以及可能存在的缺省值,这是一个列表对象;
函数体body()
,函数内部的代码
环境()
,是函数定义时所处的环境, 这会影响到参数表中缺省值与函数体中非局部变量的的查找。
函数体并不是函数对象的必要组成部分。
<- function(x, y) {
f02 # A comment
+ y
x
}formals(f02)
#> $x
#>
#>
#> $y
body(f02)
#> {
#> x + y
#> }
environment(f02)
#> <environment: R_GlobalEnv>
函数的自变量是只读的,函数中定义的局部变量只在函数运行时候起作用,并不会与外界环境相互冲突。
函数的格式为:
函数名 <- function(形式参数表) 函数体
其中的函数体是一个复合表达式,以复合表达式中最后一个表达式为返回值,也可以用return(返回值)
来表示返回值。同时返回值也可空缺。
<- function() {
f <- seq(0, 2*pi, length=50)
x <- sin(x)
y1 <- cos(x)
y2 plot(x, y1, type="l", lwd=2, col="red",
xlab="x", ylab="")
lines(x, y2, lwd=2, col="blue")
abline(h=0, col="gray")
}f()
R中函数可以进行向量化,即传入参数x
若是一个向量,则返回的结果也会是一个向量形式。