用R做一些很酷的事情

r 用来做数据统计、分析和绘图。 但是 r 也可以做一些其他 cool 的事情,譬如计算微分,譬如生成随机数。

抽样方法

sample() 函数可以用来抽样, 也可以用来模拟随机事件,譬如:

  1. > sample(1:6, 10, replace=T)  # 1 2 3 4 5 6 有放回抽样 10 次, 也就是掷筛子 10 次
  2. > sample(1:6, 4)  # 1 2 3 4 5 6 从中无放回地抽样 4 个
  3. > sample(c('正','反'), 10, replace=T)   # 掷筛子 10 次
  4. > sample(c('yes','no'), 10, replace=T, prob=c(0.3, 0.7))  # 设定 yes no 出现的概率分别是 0.7 和 0.3

随机数生成

使用 rnorom 来生成符合正态分布的随机数。 r + 分布名称, 常见的分布有:

  • norm : 正态分布 Ν(75,5²),默认为标准正态分布 Ν(0,1)
  • unif : 均匀分布
  • exp : 指数分布
  • t : T分布, 需要带自由度 df

  1. > rnorm(100)  # 取标准正态分布的 100 个随机数
  2. > x = rnorm(100, mean=75, sd=5)  # 取正态分布 <var>Ν(75,5²)</var> 的 100 个随机数

绘图

plot 绘图, curve 绘制曲线。

  1. > curve(dnorm, -5, 5)  # 标准正态分布概率密度曲线
  2. > curve(dchisq(x, df=10), 0, 100)  # 自由度为 10 的卡方分布概率密度曲线

解方程

鸡兔同笼问题: 若干只鸡和若干只兔纸在同一个笼子中,已知有35个头,94只脚,问鸡兔各多少只? so,很容易列出来方程:x+y=35; 2x+4y=94 然后解一元二次方程组就 ok 了。这里就通过矩阵运算求解线性方程组。

  1. > A = matrix(c(1,1,2,4), nrow=2, ncol=2, byrow=T)    # 系数矩阵 1 1 2 4
  2. > b = c(35,94)    # 常量矩阵
  3. > solve(A, b)    # 求解 <var>Ax = b</var>的解, 这里为 12 23
  4.  
  5. > solve(A)    # 求解 <var>A</var> 的逆矩阵 <var>A<sup>-1</sup></var>
  6. > solve(A) %*% b    # 同样是 <var>Ax = b</var> 的解
  7.  
  8. > t(A)    # 矩阵转置
  9. > t(t(b))    # 将向量 b 化为列向量
  10.  
  11. > A = matrix(c(4,9,0,0,3,-2,7,0,5), nrow=3, ncol=3, byrow=T);
  12. > b = (12, 1, 19/4);
  13. > solve(A, b)    # 解三元一次方程组, 解为: -0.75, 1.67, 2

求微分

不管说求微分也好,偏微分也好,导数也好, 都是一回事。

  1. > D(expression(sin(x)), "x")  # <var>(sin x)' = cos x</var>
  2. > D(expression(log(x)), "x")  # <var>(ln x)' = 1/x</var>
  3. > D(expression(sin(x^2+y)), "x")  # 偏微分

Tags: 

Article type: