R学习—基础

R学习

《统计建模与R软件》清华大学出版社

2.2.1向量

  1. 向量赋值
x <- c(10.4, 5,3,6,21)
c(10.4, 5,3,6,21) ->y
assign("z",c(10.4, 5,3,6,21))
  1. 向量运算
    +,- ,
    *,/,^ (对于向量是对每个分量计算)
    5 %/% 3=1(整数除法)
    5 %% 3 = 2(求余数)
    log, exp, cos, tan, sqrt (对于向量是对每个分量计算)
    (作为复数计算:sqrt(-2+0i))

  2. 与向量运算有关的函数
    x是个向量
    min(x), max(x), range(x) = [min(x), max(x)]
    which.min(x) , which.max(x)(第几个分量求到最小/大)

sum(x) (= ∑ i = 1 n x i \sum_{i=1}^{n}x_i i=1nxi分量之和)
prod(x) (= ∏ i = 1 n x i \prod_{i=1}^{n}x_i i=1nxi 分量连乘积)
length(x) (=n)

median(x) 中位数
mean(x) 均值
var(x) 方差
sd(x) 标准差
sort(x) 顺序统计量(增序排序)
order(x), sort.list(x) 列出顺序统计量的下标

2.2.2 产生有规律的序列

  1. 等差数列
> 1:5
[1] 1 2 3 4 5
> 5:1
[1] 5 4 3 2 1
> 1:5.3
[1] 1 2 3 4 5
> 5.3:1
[1] 5.3 4.3 3.3 2.3 1.3

等差运算优先于乘法运算

> 2*1:5
[1]  2  4  6  8 10
> n<-5
> 1:n-1
[1] 0 1 2 3 4
> 1:(n-1)
[1] 1 2 3 4
  1. 等间隔
    seq(from= value1, to= value2, by= value3)
    seq(step= value1, from= value2, by= value3)

  2. 重复函数

> x<-1:5
> s<-rep(x,times=3);s
 [1] 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5

2.2.3逻辑向量

<, <=, >, >=, ==, !=
a&b a与b
a|b a或b
!a 非a
逻辑变量也可以赋值

> a<-c(TRUE, FALSE, T, F);a
[1]  TRUE FALSE  TRUE FALSE
> c=1:7;c
[1] 1 2 3 4 5 6 7
> all(c>3)
[1] FALSE
> any(c>3)
[1] TRUE

2.2.4 缺失数据

NA表示某处数据缺失

> z<-c(1:3,NA);z  
[1]  1  2  3 NA
> ind <- is.na(z);ind   #检测缺失数据
[1] FALSE FALSE FALSE  TRUE
> z[is.na(z)]<-0;z   #缺失数据改为0
[1] 1 2 3 0
> x<-c(0/1,0/0,1/0,NA);x
[1]   0 NaN Inf  NA
> is.na(x)
[1] FALSE  TRUE FALSE  TRUE
> is.nan(x)   #检测数据是否不确定
[1] FALSE  TRUE FALSE FALSE
> is.finite(x)   #检测数据是否有限
[1]  TRUE FALSE FALSE FALSE
> is.infinite(x)   #检测数据是否无无穷
[1] FALSE FALSE  TRUE FALSE

2.2.5 字符型向量

> paste("my","job")
[1] "my job"
> paste("X",1:6,sep = "")
[1] "X1" "X2" "X3" "X4" "X5" "X6"
> paste(1:10)
 [1] "1"  "2"  "3"  "4"  "5"  "6"  "7"  "8"  "9"  "10"
> paste(c('a','b'),collapse = '.')
[1] "a.b"

2.2.6 复数向量

complex(re=,im=) 生成复数向量
Re(), Im() 计算复数的实、虚部
Mod() 计算复数的模
Arg() 计算复数的幅角

> x<-seq(-pi, pi, by = pi/10)
> y<-sin(x)
> z<-complex(re=x, im=y)
> plot(z)
> lines(z)

在这里插入图片描述

2.2.7 向量下标运算

> x<-c(1,4,7)
> x[2]
[1] 4
> x[2]<-125 ; x
[1]   1 125   7
> x[c(1,3)]<-c(144,169);x
[1] 144 125 169

v为和x等长的逻辑向量,x[v]表示取出所有v为真值的元素

> x<-c(1,4,7);x<5
[1]  TRUE  TRUE FALSE
> x[x<5]
[1] 1 4
> z<-c(-1,1:3,NA)    #将向量中非缺失数据赋给另一个向量
> y<-z[!is.na(z)];y
[1] -1  1  2  3
> (z+1)[(!is.na(z))&z>0]->x;x   #作相应运算
[1] 2 3 4

可用于定义分段函数
例如:
y = { 1 − x , x < 0 , 1 + x , x ⩾ 0. y= \left\{ \begin{aligned} 1-x, & x<0, \\ 1+x, & x \geqslant 0. \end{aligned} \right. y={1x,1+x,x<0,x0.

> y<- numeric(length(x))
> y[x<0] <- 1-x[x<0]
> y[x>=0] <- 1+x[x>=0]
> c("a","b","c")[rep(c(1,2,3),times=3)]
[1] "a" "b" "c" "a" "b" "c" "a" "b" "c"
> v<-10:20
> v[-(1:5)]   #表示扣除相应元素
[1] 15 16 17 18 19 20

向量的元素可以加上名字,利用名字访问

> ages <- c(li=33, zhang=29, liu=18);ages
   li zhang   liu 
   33    29    18 
> ages["zhang"]
zhang 
   29 
> fruit <- c(5,10,1,20)
> names(fruit) <- c("orange","banana","apple","peach");fruit   ##名字也可以后加
orange banana  apple  peach 
     5     10      1     20 

2.5 多维数组和矩阵

2.5.1 生成数组或矩阵

向量只有在定义了维数(dim)后才能被看作是数组。

> z<-1:12
> dim(z)<-c(3,4);z
     [,1] [,2] [,3] [,4]
[1,]    1    4    7   10
[2,]    2    5    8   11
[3,]    3    6    9   12
> dim(z)<-12    #也可以把向量定义为一维数组
> z
 [1]  1  2  3  4  5  6  7  8  9 10 11 12

可以用array()函数直接构造数组
array(data = NA, dim = length(data), dimnames = NULL)

> x<-array(1:20,dim=c(4,5));x
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    5    9   13   17
[2,]    2    6   10   14   18
[3,]    3    7   11   15   19
[4,]    4    8   12   16   20
> z<-array(0,dim=c(3,4,2))   #数组初始化的方法

用matrix()函数构造矩阵
matrix(data=NA, nrow=1, ncol=1, byrow = FALSE, dimnames = NULL)

2.5.2 数组下标

> a <- 1:24
> dim(a) <- c(2,3,4)
> a[1,2:3,2:3]
     [,1] [,2]
[1,]    9   15
[2,]   11   17
> a[, 2, ]
     [,1] [,2] [,3] [,4]
[1,]    3    9   15   21
[2,]    4   10   16   22
> a[3:10]      #忽略维数,对数组的数据向量取子集
[1]  3  4  5  6  7  8  9 10
> b <- matrix(c(1,1,1,2,2,3,1,3,4,2,1,4), ncol=3, byrow=T);b
     [,1] [,2] [,3]     #下标数组,每一行是一个元素的下标
[1,]    1    1    1
[2,]    2    2    3
[3,]    1    3    4
[4,]    2    1    4
> a[b]
[1]  1 16 23 20
> a[b]<-c(101,102,103,104)    #还可以对他们赋值

2.5.3 数组的四则运算

数组的四则运算:对 dim 属性完全相同的数组可以进行四则运算(+, -,*,/),是对应位置元素的运算。
(形状不同的向量(数组)也可以运算:把短的循环用)

2.5.4 矩阵的运算

t(A) A的转置
det() 求方阵行列式的值
x %*% y 相同维数向量求内积
x %o% y 相当于 outer(x,y) 相同维数向量求外积
A%*%B 表示两矩阵的乘积(矩阵乘法)
x %*% A %*% x 表示二次型
crossprod(A,B) 相当于 t(A) %*% B
tcrossprod(A,B) 相当于 A %*% t(B)
diag(v) 以v的元素为对角线元素的对角阵(v是一个向量)
diag(M) 取M对角线上元素的向量

solve(A,b) 求解线性方程组 A x = b Ax=b Ax=b
solve(A) 求矩阵 A A A的逆

eigen(Sm) 求对称矩阵Sm的特征值和特征向量

> A = array(c(1:8, 10), dim = c(3,3))
> Sm = crossprod(A,A);
> ev <- eigen(Sm);ev    #ev由列表形式给出
eigen() decomposition
$values
[1] 303.19533618   0.76590739   0.03875643

$vectors
           [,1]        [,2]       [,3]
[1,] -0.2093373  0.96438514  0.1616762
[2,] -0.5038485  0.03532145 -0.8630696
[3,] -0.8380421 -0.26213299  0.4785099

svd(A) 对矩阵 A A A作奇异值分解 A = U D V T A = UDV^T A=UDVT

> svdA <- svd(A);svdA
$d
[1] 17.4125052  0.8751614  0.1968665

$u
           [,1]         [,2]       [,3]
[1,] -0.4646675  0.833286355  0.2995295
[2,] -0.5537546 -0.009499485 -0.8326258
[3,] -0.6909703 -0.552759994  0.4658502

$v
           [,1]        [,2]       [,3]
[1,] -0.2093373 -0.96438514  0.1616762
[2,] -0.5038485 -0.03532145 -0.8630696
[3,] -0.8380421  0.26213299  0.4785099
> attach(svdA)
> u %*% diag(d) %*% t(v)
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6   10

lsfit(X, y) 最小二乘拟合,ls.diag() 给出拟合的进一步统计信息
qr() QR分解函数

2.5.5 与矩阵(数组)运算有关的函数

dim(A) nrow(A) ncol(A) 得到矩阵 A A A的维数、行数、列数
cbind() rbind() 分别把自变量横、纵向拼成一个大矩阵
as.vector(A) 可把矩阵转化为向量(按列)
dimnames(X) colnames(X) rownames(X)

2.7 读、写数据文件

2.7.1 读纯文本文件

read.table() 函数:读表格形式的文件
scan() 函数: 直接读纯文本文件数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值