knitr::opts_chunk$set(echo = TRUE, message = FALSE, warning = FALSE, out.width="100%") d <- seq(from = 1, to = 5, by = 0.5)
1 + 2; 1.5 + 2.4 3 - 4; -6 - 7 5 * 6; 23 * 14 7 / 8; -9 / 0.2
;
在R中有连接两个独立命令行的作用。
请根据以上命令,求解下题:
$$\frac{\frac{365}{12}}{\frac{28 + 24}{10} - (36 + 72) \times 5}$$
(365 / 12) / ((28 + 24)/10 - (36 + 72) * 5)
sqrt(9) 10^2 5%%3 #余数 log(11) log10(100) exp(12)
乃至三角函数:
sin(pi) cos(pi) tan(pi/2) acos(1) asin(1) atan(0.5)
tan(pi/2)
一个数被写成一个实数a与一个10的n次幂的积。 其中E(exponential)用来表示10的幂 举几个例子:
$$200 = 2e + 2, $$ $$0.002 = 2e-3,$$ $$333.3 = 3.333e + 2,$$ $$-45,000 = -4.5e + 4.$$
2.8e + 10 代表什么?
format(2.8e+10, scientific = FALSE, big.mark = ',')
TRUE
代表,假用FALSE
代表,也可以简写为T
和F
。!
)、等于(==
)、不等于(!=
)、大于(>
)、小于(<
)、与(&
)、并(|
)>=
)、小于等于(<=
)。举几个例子:
1 == 2 1 != 2 1 > 2 1 < 2 1 >= 2 1 <= 2 1 & 2 > 2 1 | 2 > 2
下面这个式子的结果是什么?
3 > 2 > 1
(3 > 2) & (2 > 1)
很多朋友在刚使用编程语言时候都会不习惯用两个等号(
==
)来表示“等于”,但从理解的角度,可将其视作==, !=, >=, <=
中的一员看待。
在R中,向量也是最基础的数据呈现方式。
从这个意义上,变量可被视作“有概念意义的向量”。
a <- c(11, 12, 13, 14, 15)
c
: Concatenate/combinea <- c(11, 12, 13, 14, 15) a[2] a[5]
<-
: 赋值符(assign):
: a <- 1:5
TRUE
留FALSE
不留b <- 10 * 1:5 b
# 结果是什么? c(1.5:3)
如何表示$\vec {b}=(1, 3, 4, 5, 6, 7, 9)$?
b <- c(1, 3:7, 9)
seq()
seq
()
重复上面的例子:
a <- seq(from = 1, to = 5) a
seq()
的便捷之处在于可以定义步长:
c <- seq(from = 1, to = 5, by = 3) c d <- seq(from = 1, to = 5, by = 0.5) d
seq()
另一个功能是体现元素位置。
比如:如何选出d
的偶数位上的元素?
提示: 确定索引 → 找出索引中的各位是否是偶数位(是否能被2整除),是用
TRUE
标明 → 在第二步基础上根据“TRUE
留FALSE
不留”的规则将向量中为偶数位的元素保留成为一个新向量。
d[seq(d) %% 2 == 0]
*
连接两个向量,输出点乘结果。%o%
连接两个向量或者使用outer()
命令计算。a + b a - b a * b a / b
当进行运算的向量不等长时,短向量的元素将依序循环使用,如下例:
a e <- c(1, 2) a * e
叉乘在R中其实还能做一些数据之外的事情。
举例:用这个功能来用R推演一下天干地支。
tiangan <- c("甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸") dizhi <- c("子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥")
提示: 阅者诸君周知,有十天干,十二地支。 它们共有一百二十种组合,先民取其中六十种组为干支纪年。 选择方法是阳(奇)数配阳数,阴(偶)数配阴数。
tg_yang <- tiangan[seq(tiangan) %% 2 == 1] tg_yin <- tiangan[seq(tiangan) %% 2 == 0] dz_yang <- dizhi[seq(dizhi) %% 2 == 1] dz_yin <- dizhi[seq(dizhi) %% 2 == 0] outer(tg_yang, dz_yang, FUN = paste0) outer(tg_yin, dz_yin, FUN = paste0)
a #长度 length(a) #最值 max(a) min(a) #平均值 mean(a) #中位数 median(a) #方差 var(a)
这些命令在之后基于数据的变量运算中均可通用。
$$ A_{2\times2} = \left(\begin{array}{cc} 1 & 3\ 2 & 4 \end{array}\right) $$
A <- matrix(1:4, nrow = 2) A
A[1, 2] A[1, ] A[ , 2]
B <- matrix(1:6, nrow = 3) B dim(B) t(B) t(t(B))
t(t(B))
嵌套的做法。
在R中,将两个符合定义性质的向量用
%*%
连接就可以进行这种运算。
B C <- matrix(7:12, nrow = 3) B + C B - C 10 * B D <- matrix(1:6, nrow = 2) D dim(B) dim(D) B %*% D
用R解一个三元一次方程组:
$$ \begin{equation} \begin{cases} x + y + z = 6, \ 3x + 2y + 4z = 9, \ 2x + 2y - 6z = 4. \end{cases} \end{equation} $$
$$ \begin{align} \vec{b} =& \vec{E}\vec{x},\ \begin{bmatrix} 6 \ 9 \ 4 \end{bmatrix} =& \begin{bmatrix} 1 & 1 & 1 \ 3 & 2 & 4 \ 2 & 2 & -6 \end{bmatrix} \begin{bmatrix} x \ y \ z \end{bmatrix} \end{align}. $$
E <- matrix(c(1, 3, 2, 1, 2, 2, 1, 4, -6), nrow = 3) E b <- c(6, 9, 4) x <- solve(E, b) x
解方程组的一个直接应用就是解回归方程。 回归方程通常可以以线性代数方式表达: 比如,对一个基本的回归就可以写成如下形式,就和我们上面解的方程组非常相似了:
$$ \begin{align} y& =& &\beta_0 + \beta_1x_1 + \beta_2x_2 + ... + \beta_nx_n + \epsilon\ \vec{y}& =& &\vec{x}\vec{\beta} + \vec{\epsilon}.\ \uparrow& & &\uparrow\uparrow\ \vec{b}& =& &\vec{E}\vec{x} \end{align} $$
!
、==
、!=
、>
、<
、&
、|
、>=
、<=
<-
%*%
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.