R的入门笔记。~
1. R数值
R中的赋值 “<-
", 例如 a <- 100;
R语言区别大小写,#
后边的都表示注释
数值运算符 +、-、*、/、^
、%%
余数、%/%
表示整除的商
常见数学函数:exp()、sqrt()、sin()、cos()、tan()、cot()
条件判断:if (conditon) {expr1} else {expr2}
循环: for (i in1:10) {
#expressions
}
while (a <121)
{
a <- a+1
}
显示/设置工作目录:getwd()
;setwd(dir)
#其中,dir是目录的字符串
读文本文件:(x=read.table("abc.txt"))
读剪切板: y<-read.table("clipboard", header=F)
2. 序列和向量
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
#使用c()函数使用一个序列创建向量。向量中无法存储不同类型。在R语言中,下标从1开始。 > a <- c(1:10) [1] 1 2 3 4 5 6 7 8 9 10 # 1:10生成一个序列,更复杂的序列可以使用seq(from=,to=,by=,length.out=)来创建 > seq(5,1,-1) [1] 5 4 3 2 1 # 自动变换为字符串向量 > a <- c(1,2,"3", 4) [1] "1" "2" "3" "4" #引用向量中的元素 > a[1] [1] "1" > a[2:3] [1] "2" "3" # 可以越界赋值 > v <- c(1:5) > v[7] <- 7 > v [1] 1 2 3 4 5 NA 7 # length(v)以及截断向量 > v <- v[1:length(v)-1] > v [1] 1 2 3 4 5 NA # which函数——找到对应元素位置 > v[which.max(7)] [1] 1 > v[which(v<4)] [1] 1 2 3 # 向量的运算 > 1:5 * 1:5 [1] 1 4 9 16 25 # 当两个向量不一致时,长向量会拉长短的向量 > 1:2 * 1:5 [1] 1 4 3 8 5 # 警告信息: In 1:2 * 1:5 : 长的对象长度不是短的对象长度的整倍数 > 1:3 * 1:6 [1] 1 4 9 4 10 18 > 1:3 - 1:6 [1] 0 0 0 -3 -3 -3 # 对于乘方,序列和向量定义不一样 > c(1:3) ^ 2 [1] 1 4 9 > 1:3 ^ 2 [1] 1 2 3 4 5 6 7 8 9 # 函数 min()、max()、range()、mean()、sum()、median()、var()、sd()、sort()、var()、prod(), rev()(转置) > max(seq(1,100,5)) [1] 96 > sort(c(1,2,3,100,4,5)) [1] 1 2 3 4 5 100 # 判断是否为数值型向量is.numeric(v),其他向量向数值型向量转换as.numeric(v) > is.numeric(v) [1] TRUE # 向量字符串拼接paste(),例如拼接成Hadoop1,...,Hadoop10 > paste("Hadoop",1:10) [1] "Hadoop 1" "Hadoop 2" "Hadoop 3" "Hadoop 4" "Hadoop 5" "Hadoop 6" [7] "Hadoop 7" "Hadoop 8" "Hadoop 9" "Hadoop 10" # 特殊向量letters,只包含26个英文字母 > letters[1:27] [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" [19] "s" "t" "u" "v" "w" "x" "y" "z" NA |
3. 矩阵
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
# mat <- matrix(vector, nrow=5, ncol=4, byrow=是否按行填充, dimnames=list(行名,列名)) > y <- matrix(1:20, nrow=5, ncol=4) byrow默认为FALSE,即为按列填充 [,1] [,2] [,3] [,4] [1,] 1 6 11 16 [2,] 2 7 12 17 [3,] 3 8 13 18 [4,] 4 9 14 19 [5,] 5 10 15 20 > y <- matrix(1:20, nrow=5, ncol=4, byrow=TRUE) [,1] [,2] [,3] [,4] [1,] 1 2 3 4 [2,] 5 6 7 8 [3,] 9 10 11 12 [4,] 13 14 15 16 [5,] 17 18 19 20 #引用二维数组中的行、列和元素 > y[2,] [2,] 5 6 7 8 > y[,2] [1] 2 6 10 14 18 > y[2,3] [1] 7 > y[15] 19 #矩阵的转置t() > t(y) [,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 # 矩阵元素相乘,注意这个不是矩阵相乘。只是把对应位置的元素累加相乘 > y [,1] [,2] [,3] [,4] [1,] 1 2 3 4 [2,] 5 6 7 8 [3,] 9 10 11 12 [4,] 13 14 15 16 [5,] 17 18 19 20 > x <- y > x * y [,1] [,2] [,3] [,4] [1,] 1 4 9 16 [2,] 25 36 49 64 [3,] 81 100 121 144 [4,] 169 196 225 256 [5,] 289 324 361 400 # 矩阵乘法 > x%*%t(y) [,1] [,2] [,3] [,4] [,5] [1,] 30 70 110 150 190 [2,] 70 174 278 382 486 [3,] 110 278 446 614 782 [4,] 150 382 614 846 1078 [5,] 190 486 782 1078 1374 # 返回对角线元素 > diag(x%*%t(y)) [1] 30 174 446 846 1374 # 对对角线元素进行赋值 > diag(x)=c(1,1,1,1,1) #矩阵求逆 > x <- matrix(c(0,-1,1,0),c(2,2)) > x [,1] [,2] [1,] 0 1 [2,] -1 0 > x %*% solve(x) [,1] [,2] [1,] 1 0 [2,] 0 1 # 所以,解线性方程组可以用下面形式 # rnorm随机生成n个正态分布数值 a = matrix(rnorm(9),3,3) > b = c(1:3) > solve(a,b) [1] -2.487998 1.216154 3.514883 # 向量的特征值和特征向量 > a = diag(4) + 1 [,1] [,2] [,3] [,4] [1,] 2 1 1 1 [2,] 1 2 1 1 [3,] 1 1 2 1 [4,] 1 1 1 2 > e=eigen(a, symmetric=T) > e $values [1] 1.0678536 0.2588075 -2.2677050 $vectors [,1] [,2] [,3] [1,] 0.4845257 -0.4162083 0.7694190 [2,] -0.5458821 -0.8311498 -0.1058429 [3,] -0.6835551 0.3687284 0.6299141 |
4. 多维数组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
#array(vector, dimensions, dimnames) #可以是任意维度,例如定义一个三维数组 > dim1name<-c("A1","A2","A3") > dim2name<-c("A1","A2","A3") > dim3name<-c("C1","C2","C3") > arr_dim3<-array(1:27, c(3,3,3), list(dim1name,dim2name,dim3name)) > arr_dim3 , , C1 A1 A2 A3 A1 1 4 7 A2 2 5 8 A3 3 6 9 , , C2 A1 A2 A3 A1 10 13 16 A2 11 14 17 A3 12 15 18 , , C3 A1 A2 A3 A1 19 22 25 A2 20 23 26 A3 21 24 27 > arr_dim3[1,2,3] [1] 22 > arr_dim3[1,,3] A1 A2 A3 19 22 25 |
5. 数据框
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
#矩阵的扩展,可以包括不同的数据类型 #data.frame(col1, col2, col3) > a1 <- c(1,2,3) > a2 <- c("str1","str2","str3") > dat <- data.frame(a1, a2, "dat1 Description") > dat a1 a2 X.dat1.Description. 1 1 str1 dat1 Description 2 2 str2 dat1 Description 3 3 str3 dat1 Description # 从上可以看出,向量长度不足的是将其扩展了。最后形成为一个矩阵,有些类似于关系数据库中的表结构 # 继续扩展data frame,将两个data frame合并 > dat1 <- data.frame(dat,dat) > dat1 a1 a2 X.dat1.Description. a1.1 a2.1 X.dat1.Description..1 1 1 str1 dat1 Description 1 str1 dat1 Description 2 2 str2 dat1 Description 2 str2 dat1 Description 3 3 str3 dat1 Description 3 str3 dat1 Description > dat[1:2] a1 a2 1 1 str1 2 2 str2 3 3 str3 # 或者使用table()来获取 > table(dat$a1, dat$a2) str1 str2 str3 1 1 0 0 2 0 1 0 3 0 0 1 # factor # 因子=名义型 或 有序型 > a <- c(1,3,4,6,2,5) > d <- factor(a) > d [1] 1 3 4 6 2 5 Levels: 1 2 3 4 5 6 > d <- factor(a, ordered=TRUE) > d [1] 1 3 4 6 2 5 Levels: 1 < 2 < 3 < 4 < 5 < 6 # levels可以自由指定 #将数据框写入文件 > write.table(x, file="d:\\sorce.txt", col.names=F, row.names=F, seq=" ") |
6. 列表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
> n <- "I am a list" > a <- c(1:4) > b <- c("A", "B", "C") > l <- list(title=n, s=a, b) > l $title [1] "I am a list" $s [1] 1 2 3 4 [[3]] [1] "A" "B" "C" # 所有,访问第一列可以用双中括号访问,或者用$加名字访问 > l[[1]] [1] "I am a list" > l[[2]] [1] 1 2 3 4 > l$s [1] 1 2 3 4 |
7. 常见数据分布
正太分布rnorm()
柏松分布rpois()
指数分布rexp()
Gamma分布函数rgamma( )
均匀分布函数runif( )
二项分布函数rbinom( )
何分布函数rgeom( )
例如:
1 2 3 4 5 6 7 |
> x1 = runif(100,min=80,max=100) > x2 = round(rnorm(100, mean=80, sd=7)) > x2 [1] 77 71 91 84 89 84 86 88 83 68 76 75 85 65 71 73 91 86 78 92 86 85 71 85 82 74 79 94 [29] 81 92 77 76 81 74 76 70 82 82 70 84 81 90 88 69 86 75 86 80 77 81 77 80 69 83 83 71 [57] 72 74 80 83 85 71 83 72 87 90 86 77 92 90 82 87 75 74 72 80 80 64 101 78 81 83 89 76 [85] 79 86 81 75 76 86 69 75 87 73 80 90 84 85 75 74 |
^^
谢谢分享先… 然后可能有个错误. # 对于乘方,序列和向量定义不一样 (1:10) 也应该是 vector 吧? 所以 c(1:10) 与 1:10 是一样的… 然后 c(1:10)^2 与 (1:10)^2 结果是一样的. 你写的 1:10^2 中 ^ 运算的优先级比较高, 所以相当于 1:100
打开 uvu.cc/ir7p都是 浪美眉
男人的天堂、高清s萝舞,电动s棒棒各种耍 http://uVU.cc/iqVo
这个更刺j激,准备c好手纸哦 A 片。。 http://T.CN/RcDykDn
说走就走的旅行,谁都想!但是钱呢。。。
看看,谢谢楼主。