• 『原创』统计建模与R软件-第二章 R软件的使用


    统计建模与R软件-第二章

    2.1 建立一个R文件,在文件中输入变量 (x=(1,2,3)^T), (y=(4,5,6)^T),并作以下运算。

    (1)计算(z=2x+y+e),其中(e=(1,1,1)^T)
    (2)计算(x)(y)的内积;
    (3)计算(x)(y)的外积。

    x <- c(1, 2, 3)
    y <- c(4, 5, 6)
    e <- c(1, 1, 1)
    
    2 * x + y + e
    
    ## [1]  7 10 13
    
    crossprod(x, y)  #内积
    
    ##      [,1]
    ## [1,]   32
    
    tcrossprod(x, y)  #外积
    
    ##      [,1] [,2] [,3]
    ## [1,]    4    5    6
    ## [2,]    8   10   12
    ## [3,]   12   15   18
    

    2.2 将1,2,....,20构成两个4×5阶的矩阵,其中矩阵(A)是按列输入,矩阵(B)是按行输入,并作如下运算。

    (1)(C=A+B)
    (2)(D=AB)
    (3)(E=(e_{ij})_{n×n}),其中(e_{ij}=a_{ij}.b_{ij})
    (4)(F)是由(A)的前3行和前3列构成的矩阵
    (5)(G)是由矩阵(B)的各列构成的矩阵,但不含(B)的第3列。

    A <- matrix(1:20, nrow = 4, byrow = FALSE)  #按列输入
    B <- matrix(1:20, nrow = 4, byrow = TRUE)  #按行输入
    A
    
    ##      [,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
    
    B
    
    ##      [,1] [,2] [,3] [,4] [,5]
    ## [1,]    1    2    3    4    5
    ## [2,]    6    7    8    9   10
    ## [3,]   11   12   13   14   15
    ## [4,]   16   17   18   19   20
    
    
    C <- A + B
    C
    
    ##      [,1] [,2] [,3] [,4] [,5]
    ## [1,]    2    7   12   17   22
    ## [2,]    8   13   18   23   28
    ## [3,]   14   19   24   29   34
    ## [4,]   20   25   30   35   40
    
    
    D <- A %*% B
    
    ## Error: 非整合参数
    
    D
    
    ## function (expr, name) 
    ## .Internal(D(expr, name))
    ## <bytecode: 0x04cb6d4c>
    ## <environment: namespace:stats>
    
    
    E <- A * B
    E
    
    ##      [,1] [,2] [,3] [,4] [,5]
    ## [1,]    1   10   27   52   85
    ## [2,]   12   42   80  126  180
    ## [3,]   33   84  143  210  285
    ## [4,]   64  136  216  304  400
    
    
    F <- A[1:3, 1:3]
    F
    
    ##      [,1] [,2] [,3]
    ## [1,]    1    5    9
    ## [2,]    2    6   10
    ## [3,]    3    7   11
    
    
    G <- B[, -3]
    G
    
    ##      [,1] [,2] [,3] [,4]
    ## [1,]    1    2    4    5
    ## [2,]    6    7    9   10
    ## [3,]   11   12   14   15
    ## [4,]   16   17   19   20
    

    2.3 构造一个向量(x),向量是由5个1,3个2,4个3和2个4 构成,注意用到rep()函数

    c(rep(1, 5), rep(2, 3), rep(3, 4), rep(4, 2))
    
    ##  [1] 1 1 1 1 1 2 2 2 3 3 3 3 4 4
    

    2.4 生成一个5阶的(Hilbert)矩阵,

    [H=(h_{ij})_{n×n}, h_{ij}=frac{1}{i+j-1},qquad i,j=1,2,ldots,n. ]

    (1)计算(Hilbert)矩阵(H)的行列式
    (2)求(H)的逆矩阵
    (3)求(H)的特征值和特征向量

    n <- 5
    H <- array(0, dim = c(n, n))
    for (i in 1:n) {
        for (j in 1:n) {
            H[i, j] <- 1/(i + j - 1)
        }
    }
    H
    
    ##        [,1]   [,2]   [,3]   [,4]   [,5]
    ## [1,] 1.0000 0.5000 0.3333 0.2500 0.2000
    ## [2,] 0.5000 0.3333 0.2500 0.2000 0.1667
    ## [3,] 0.3333 0.2500 0.2000 0.1667 0.1429
    ## [4,] 0.2500 0.2000 0.1667 0.1429 0.1250
    ## [5,] 0.2000 0.1667 0.1429 0.1250 0.1111
    
    det(H)  #行列式值
    
    ## [1] 3.749e-12
    
    solve(H)  #逆矩阵
    
    ##       [,1]   [,2]    [,3]    [,4]   [,5]
    ## [1,]    25   -300    1050   -1400    630
    ## [2,]  -300   4800  -18900   26880 -12600
    ## [3,]  1050 -18900   79380 -117600  56700
    ## [4,] -1400  26880 -117600  179200 -88200
    ## [5,]   630 -12600   56700  -88200  44100
    
    eigen(H)  #特征值和特征向量
    
    ## $values
    ## [1] 1.567e+00 2.085e-01 1.141e-02 3.059e-04 3.288e-06
    ## 
    ## $vectors
    ##        [,1]    [,2]    [,3]     [,4]      [,5]
    ## [1,] 0.7679  0.6019 -0.2142  0.04716  0.006174
    ## [2,] 0.4458 -0.2759  0.7241 -0.43267 -0.116693
    ## [3,] 0.3216 -0.4249  0.1205  0.66735  0.506164
    ## [4,] 0.2534 -0.4439 -0.3096  0.23302 -0.767191
    ## [5,] 0.2098 -0.4290 -0.5652 -0.55760  0.376246
    

    2.5 已知有5名学生的数据,如表2.3所示,用数据框的形式读入数据。

    序号 姓名 性别 年龄 身高(cm) 体重(kg)
    1 张三 14 156 42.0
    2 李四 15 165 49.0
    3 王五 16 157 41.0
    4 赵六 14 162 52.0
    5 丁一 15 159 45.5
    df <- data.frame(seq = 1:5, name = c("张三", "李四", "王五", "赵六", "丁一"), 
        sex = c("女", "男", "女", "男", "女"), age = c(14, 15, 16, 14, 15), height = c(156, 
            165, 157, 162, 159), weight = c(42, 49, 41, 52, 45.5))
    df
    
    ##   seq name sex age height weight
    ## 1   1 张三  女  14    156   42.0
    ## 2   2 李四  男  15    165   49.0
    ## 3   3 王五  女  16    157   41.0
    ## 4   4 赵六  男  14    162   52.0
    ## 5   5 丁一  女  15    159   45.5
    

    2.6 将例2.5中的数据表2.3的数据写成一个纯文本文件,用函数read.table()读该文件,然后再用函数write.csv()写成一个能用excel表能打开的文件,并用excel表打开。

    df <- data.frame(seq = 1:5, name = c("张三", "李四", "王五", "赵六", "丁一"), 
        sex = c("女", "男", "女", "男", "女"), age = c(14, 15, 16, 14, 15), height = c(156, 
            165, 157, 162, 159), weight = c(42, 49, 41, 52, 45.5))
    write.table(df, "ch2_2_6.txt")
    df2 <- read.table("ch2_2_6.txt")
    write.csv(df2, "ch2_2_6.csv")
    

    2.7 编写一个R程序(函数)。输入一个整(n),如果(n<=0),则终止运算,并输出一句话:“要求输入一个正整数”;否则,如果(n)是偶数,则将(n)除2,并赋值给(n);否则将(3n+1)赋给(n),不断循环,直到(n=1),才停止运算,并输出一句话:“运算成功”.这个例子是为了验证数论中的一个简单定理。

    fcul <- function(n) {
        if (n <= 0) 
            list(msg = "要求输入一个正整数") else {
            repeat {
                if (n == 1) 
                    break
                if (n%%2 == 0) {
                    n = n/2
                } else {
                    n = 3 * n + 1
                }
            }
            list(msg = "运算成功")
        }
    }
    fcul(-1)
    
    ## $msg
    ## [1] "要求输入一个正整数"
    
    fcul(10)
    
    ## $msg
    ## [1] "运算成功"
    

    本文由digging4发表于:http://www.cnblogs.com/digging4/p/5031186.html

  • 相关阅读:
    如何通过命令行窗口查看sqlite数据库文件
    eclipse自动补全的设置
    文本装饰
    注释和特殊符号
    文本装饰
    网页背景
    通过ArcGIS Server admin 查看和删除已注册的 Web Adaptor
    通过 ArcGIS Server Manager 查看已安装的 Web Adaptor
    通过 ArcGIS Server Manager 验证 DataStore
    Windows上安装ArcGIS Enterprise——以 Windows Server 2012 R2上安装 ArcGIS 10.8为例
  • 原文地址:https://www.cnblogs.com/digging4/p/5031186.html
Copyright © 2020-2023  润新知