R语言学习笔记——基础

来源:互联网 发布:神通数据库hibernate 编辑:程序博客网 时间:2024/05/05 12:14

简单的算术操作和向量运算

R语言学习由浅入深路线图 http://www.itongji.cn/article/121G4A2012.html

一、r 的数据类型只有以下三种

1)字符串型 例如:"hello"

2)逻辑型 只有 TRUE FALSE

3)   数值型 例如:10

注意:r 语言就是这三种数据类型组成各种各样的对象 而且这些类型都是r 语言自动识别的

例如:

x <- c(1,2,3,12.3,11.2,"fdjf")  #r 会自动将所有数据变成字符型y <- c(1,2,3,12,11,3)  #r 就会认为是整形y <- c(1,2,3,12,11,3.0) # r 就会全部认为是浮点型

函数c() 可以有任意多个参数,而它返回的值则是一个把这些参数首尾相连形成的向量
在R 环境里面,单个的数值也是被看作长度为1的向量


二、向量运算

在算术表达式中使用向量将会对该向量的每一个元素都进行同样算术运算(记住这一点会使自己注意到很多会犯错误的细节)

基本的算术运算符号:+,-,*,/,^  sqrt() 求平方根

常用的数学函数 取对数函数: log() log2() log10()  exp()表示自然数的几次幂 log(exp(n)) = n

三角函数:sin() cos() tan() 

求最大最小的函数:min() max()

求向量值得范围 range() 返回的是 c(min(), max())

求向量中所有元素的和与乘积: sum() prod()

求平均值: mean() = sum()/length()

求样本方差(修正的:var(x) = sum((x - mean(x))^2) /(length(x) - 1)

注意:如果var() 的参数是一个n×p 的矩阵,则将该矩阵行与行之间看作是相互独立的p-变
量的样本向量,从而得到一个p×p 的样本协方差矩阵。

向量排序:sort() 升序排列 order() sort.list() 后两个更加强大(可以指定排序方式)


注意max 和min 将会给出它们参数向量中的最大和最小值。在同时给予多个参数向量的情况下,这两个函数会把参数向量合并成一个向量处理。并行(parallel)求解
最大和最小值的函数pmax 和pmin 将会返回一个和最长的参数长度一致的向量。该向量每一个元素就是同一位置上的所有输入向量(即函数的参数)元素的最大(最小)值。


二、向量生成

第一种最简单的方法就是形如 1:n 此时会生成1到n个整数 在R表达式中,冒号优先级别最高

如果想指定步长就要用另一个更厉害的函数seq()  必须指定起始位置 结束位置 可以指定步长 by= 也可以指定生成多上个元素 length=> seq(-5, 5, by=.2) -> s3将向量c(-5.0, -4.8, -4.6, ..., 4.6, 4.8, 5.0) 赋给s3。类似的是,> s4 <- seq(length=51, from=-5, by=.2)


重复向量元素, 一个常用的函数式 rep() 见下例

> x = c(1,2,3,4,5)> s = rep(x, times=3)> s [1] 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5> s = rep(x, each=5)> s [1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 5 5 5 5 5


逻辑向量的产生:

> x = c(1,2,3,4,5)> temp <- x > 13> temp[1] FALSE FALSE FALSE FALSE FALSE

缺损值:

> x <- c(1:3, NA)> is.na(x)[1] FALSE FALSE FALSE  TRUE
特别要注意的是逻辑表达式x == NA 和 is.na(x) 完全不同。

因为NA 不是一个真实的值而是一个符号以表示某个量是不可得到的,

因此x == NA 得到的是一个长度和x一致的向量。它的所有元素的值都是NA。

因为该逻辑表达式本身不完整,因此也是不可判断的。

字符串处理函数:重点

#函数paste() 可以有任意多的参数,并且把它们一个接一个连成字符串。#这些参数中的任何数字都将被显式地强制转换成字符串,而且以同样的方式在终端显示。#默认的分隔符是单个的空格符,不过这可以被指定的参数修改。#参数sep=string 就是将分隔符换成string,这个参数可以设为空。#注意其中参数可以为向量,最后得到的向量是最长的向量的长度,其他就会循环去匹配组合> test <- paste("I","love","ptt","very",1314)> test[1] "I love ptt very 1314"> test <- paste("I","love","ptt","very",1314,"")> test[1] "I love ptt very 1314 "> test <- paste("I","love","ptt","very",1314,sep="")> test[1] "Ilovepttvery1314"> labs <- paste(c("x","y"), 1:10, sep="");> labs [1] "x1"  "y2"  "x3"  "y4"  "x5"  "y6"  "x7"  "y8"  [9] "x9"  "y10"> labs <- paste("x","y",1:10);> labs [1] "x y 1"  "x y 2"  "x y 3"  "x y 4"  "x y 5"  [6] "x y 6"  "x y 7"  "x y 8"  "x y 9"  "x y 10"


最后再来看几个有趣的例子:

> x <- c(1,2,3,4,NA)> x[1]  1  2  3  4 NA> y <- x[!is.na(x)]> y[1] 1 2 3 4> (x+1)[(!is.na(x)) & x>0] -> z> z[1] 2 3 4 5> x[c(3,3)][1] 3 3> x[c(3,2)][1] 3 2> x[3:2][1] 3 2> x[3:1][1] 3 2 1> x[1:10] [1]  1  2  3  4 NA NA NA NA NA NA> c("x","y")[rep(c(1,2,2,1), times=4)] [1] "x" "y" "y" "x" "x" "y" "y" "x" "x" "y" "y" "x" "x" "y" "y" "x"> y <- x[-1]> y[1]  2  3  4 NA> fruit <- c(5, 10, 1, 20)> names(fruit) <- c("orange","banana","apple","peach")> fruitorange banana  apple  peach      5     10      1     20 > lunch <- fruit[c("apple", "orange")]> lunch apple orange      1      5 > x[!is.na(x)] <- 0> x[1]  0  0  0  0 NA> x[is.na(x)] <- 0> x[1] 0 0 0 0 0> x <- x-1> x[1] -1 -1 -1 -1 -1> x <- abs(x)> x[1] 1 1 1 1 1



0 0