zoukankan      html  css  js  c++  java
  • 『原创』统计建模与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

  • 相关阅读:
    串行通讯FIFO法和中断处理程序中直接处理的比较
    [FSM]状态机入门——程咬金只要三斧头厉害
    [FSM]状态机平面(任务平面)
    KMP算法
    【对线面试官】 Java 泛型
    【对线面试官】Java注解
    古文明中的经典作品
    《我是猫》总结
    Vue快速使用
    《算法帝国》总结
  • 原文地址:https://www.cnblogs.com/digging4/p/5031186.html
Copyright © 2011-2022 走看看