菜鸡的R语言学习笔记——数据结构 Part 2

R version 3.4.2 (2017-09-28) -- "Short Summer"


Copyright (C) 2017 The R Foundation for Statistical Computing

Platform: x86_64-w64-mingw32/x64 (64-bit)

         本文的主要知识点来n源于《R统计建模与R软件》,同时还参考了     

         首先本文设计的数据结构包括(1)数字、字符与向量 (2)因子 (3)数组、向量与矩阵 (4)列表与数据框

         1.1 xian gliang

         1.2 其相关运用

         能用向量的,就别用循环,因为R语言的的循环每一次运行都会检查语法错误所以非常慢,不如apply族函数趟过去         

> x<-c(10.4,5.6,3.1,6.4,21.7)
> print(x)
[1] 10.4  5.6  3.1  6.4 21.7
       向量的运算和数字相同,加减乘除都是对于向量中的元素的运算,同时注意,在R语言中,1:n可以快速生成一个序列,这样对于一些编程工作有着较好的支持能力。例如如下的例子:

> y<-3:7
> print(y)
[1] 3 4 5 6 7
> x*y
[1]  31.2  22.4  15.5  38.4 151.9
> x+y
[1] 13.4  9.6  8.1 12.4 28.7
> x/y
[1] 3.466667 1.400000 0.620000 1.066667 3.100000
> x-y
[1]  7.4  1.6 -1.9  0.4 14.7
> x[y]
[1]  3.1  6.4 21.7   NA   NA
              最后一个实际上是对于x向量的一个索引,由于x向量的length是5,所以第6位和第7位是NA缺失,同样的,我们求响应的其他函数都是相同的的操作方式,只要输入就行,基本上R语言的函数都是支持向量的。例子如下:

> sin(x)
[1] -0.82782647 -0.63126664  0.04158066  0.11654920  0.28705265
> sqrt(x)
[1] 3.224903 2.366432 1.760682 2.529822 4.658326
> exp(x)
[1] 3.285963e+04 2.704264e+02 2.219795e+01 6.018450e+02 2.655769e+09
> min(x)
[1] 3.1
> max(x)
[1] 21.7
> which.max(x)
[1] 5
        最后的which.max()函数指向了x最大值所在的x向量的位置,同样的,要强调一点是之前那个序列发生机制反向也是可以做的,比如定义n:1也是可以的,所以这里我们需要记得这一点,这一点在for循环中用到很多。

        1.2 相关函数

        a. 等间隔函数seq()

        用于产生等间隔的数列,基本形式:

        seq(from = 1, to = 1, by = ((to - from)/(length.out - 1)),length.out = NULL, along.with = NULL, ...)

  或者seq(length=value2,from=value1,by=value3)

        Generate regular sequences. seq is a standard generic with a default method. seq. is a primitive which can be much faster but has a few restrictions. seq_along and seq_len are very fast primitives for two common cases.

        举例如下:

> s2<-seq(length=5,from = 1,by=0.2)
> print(s2)
[1] 1.0 1.2 1.4 1.6 1.8
        b.重复函数rep()

        rep()是一个重复函数,它可以将某一向量重复若干次再放入新向量中,其基本语法规则为:rep(x,times=...)

        rep replicates the values in x. It is a generic function, and the (internal) default method is described here.
        rep.int and rep_len are faster simplified versions for two common cases. They are not generic.

> rep(c(1,2,3),c(3,4,5))
 [1] 1 1 1 2 2 2 2 3 3 3 3 3
        是不是偷懒神器,hhhh,不过这个在做一些判别分析的时候非常有用,谨记

        1.3 其他类型的神器向量

         a.逻辑型

         这里直接照抄《统计建模与R软件》的例子说明

> t<-1:7
> t>7
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE
> z<-c(TRUE,FALSE,T,F)
> z
[1]  TRUE FALSE  TRUE FALSE
> all((1:7)>3)
[1] FALSE
> any(1:7>3)
[1] TRUE
          b.字符型向量
         R语言的向量也可以是字符型的向量,就可以理解为把普通向量的数字换成字符串就行了,但是这里一定要强调一个paste函数的作用,震惊.jpg

> (paste("X",1:6,sep = ""))
[1] "X1" "X2" "X3" "X4" "X5" "X6"
> (paste("result_",1:4,sep = ""))
[1] "result_1" "result_2" "result_3" "result_4"
> (paste("Today is",date()))
[1] "Today is Fri Nov 17 00:44:08 2017"
> (paste(c('a','b'),collapse = '.'))
[1] "a.b"
> paste(1:10)
 [1] "1"  "2"  "3"  "4"  "5"  "6"  "7"  "8"  "9"  "10"
       paste函数往往在输出多个csv文件时有奇效,例如

> write.csv(iris,paste("iris",11,".csv",sep = ""))
> file.remove("iris11.csv")

       就可以输出一个名字为iris11.csv的CSV文件了,第二行的命令用于删除该csv文件,是不是很nice

       同时呢,我还想多讲一个expression()函数的问题,因为这有关于求导,上例子:

> D(expression(x^2+sin(y)+exp(z)),"x")
2 * x
       c.复数向量

       实数换复数就行,记得1+2i用complex(1,2)输入就行

       1.3 向量下标运算
        向量可以通过其在全向量中的位置来导出相应的元素,这种位置的描述可以是函数的输出,也可以是单纯的数字或者向量,这里我们复现《统计建模与R软件》中的例子来叙述该问题,请看例子

> x<-1:9
> c<-3:6
> x[c]
[1] 3 4 5 6
> x[-c]
[1] 1 2 7 8 9
        逻辑向量注意na缺失的问题,见以下例子:

> zz<-c(1:3,rep(NA,3),NULL)
> zz
[1]  1  2  3 NA NA NA
> zz[zz<3]
[1]  1  2 NA NA NA
> zz[is.na(zz)]
[1] NA NA NA
> zz[!is.na(zz)]
[1] 1 2 3
        是不是略智障,但是还有两个问题需要记录一下,hh,见下例子:

> c("a","b","c")[rep(c(1,2,3),times=3)]
[1] "a" "b" "c" "a" "b" "c" "a" "b" "c"
> (ages<-c(Li=33,Zhang=29,Liu=18))
   Li Zhang   Liu 
   33    29    18 
> ages["Li"]
Li 
33 
        #本来觉得向量重要但是要写的也不多吧,结果还是跑偏加自己蠢写了一大堆,hh。  

        OK,到这里,我的向量篇就结束了,希望各位前辈批评指正,我还是个菜鸡,希望各位大佬多多指点,联系留言即可,或者可以发邮件到yzs94nb@163.com交流。







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值