zoukankan      html  css  js  c++  java
  • R语言学习笔记:向量

    R语言学习笔记:向量

    向量是R语言最基本的数据类型。

    单个数值(标量)其实没有单独的数据类型,它只不过是只有一个元素的向量。

    x <- c(1, 2, 4, 9)

    x <- c(x[1:3], 88, x[4])   #在最后一个数前面插入一个数值88,可以看到用x[4]可以取出第4个元素,用x[1:3]可以取出前3个元素

    typeof(x)    #查看向量里的元素的类型,注意默认是double。[1] "double"

    mode(x)    #r语言中变量类型称为模式(mode)。[1] "numeric"

    length(x)  #获取向量的长度

    R不需要提前申明变量,大小写敏感,数组是从1开始。

    冒号运算符

    1:4     #R是一种函数式语言,冒号也是一种运算符(实际上这是一种中置运算符的表示法),可以产生序列。[1] 1 2 3 4

    ":"(1, 4)    #与1:4是等价的,用引号引起来,就是一种函数名了,不过这种写法看上去比1:4怪异多了

    5:1 #结果:[1] 5 4 3 2 1

    1:10 - 1 #冒号的优先级比加减运算要高,实际上就是(1:10) - 1,结果: [1] 0 1 2 3 4 5 6 7 8 9 
    1:(10-1) #结果:[1] 1 2 3 4 5 6 7 8 9

    循环补齐recycle

    这种特性在其它语言中以前还没有看见过!超强的向量运算功能!

    y <- c(1,2,3) + 4     # 单个的数值4会被补齐为c(4,4,4),最后结果为c(5,6,7)

    c(1,2,3) * c(4,5,6)   # 结果:[1]  4 10 18,这里表示的两个向量中的元素分别相乘,如果想求向量的点积(dot prod),就需要用这个%*%函数了

    c(1,2,3) %*% c(4,5,6)  #结果是一个1x1的矩阵,其中只有一个元素14

    c(1,2,3) * c(4,5,6,7) #结果:[1]  4 10 18  7。同时给出警告信息:长的对象长度不是短的对象长度的整倍数

    取模运算%%

    c(7,8,9) %% 3  #结果:[1] 1 2 0

    向量索引

    普通的语言中索引只能是正整数,但这里的索引可以是向量,还可以是负数。严格说来这不能叫索引,而是筛选操作,看后面的filtering

    x <- c(1,3,5,7,9)

    x[2] #结果:[1] 3

    x[c(5,4,3,2,1)]   #结果为:[1] 9 7 5 3 1

    x[sample(1:5)]  #把1,3,5,7,9乱序排列,每次运行你会得到一个不同的结果

    x[-1] #[1] 3 5 7 9,把第一个元素除掉,这是我非常喜欢的语法特性!

    x[1:3] #结果:[1] 1 3 5

    seq()创建向量

    seq(from=12, to=30, by=3)    # 也可以写成: seq(12,30,3) 
    [1] 12 15 18 21 24 27 30

    seq(from=1.1, to=2, length=10) 
    [1] 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0

    x <- c(1,2,4,8) 
    seq(x) 
    [1] 1 2 3 4

    seq(1,5)与1:5是一个意思

    rep重复向量常数

    rep(8, 4) 
    [1] 8 8 8 8

    rep(1:3, 2) 
    [1] 1 2 3 1 2 3

    rep(1:3, each=2) 
    [1] 1 1 2 2 3 3

    all()和any()

    x<-(1:10) 
    any(x>8) #只要向量中有一个大于8,就返回真 
    [1] TRUE 
    all(x>8) #所有都大于8,才返回真 
    [1] FALSE

    向量化

    w <- function(x) return (x+1)   #加号运算符支持向量,所以自定义的函数w也是向量化的!看上去简单的x+1,但我们已经写出了一个向量函数

    w(1) #这是我们最熟悉的函数调用 
    [1] 2

    w(c(1,3,5)) #可以对向量进行运算 
    [1] 2 4 6

    NA与NULL

    在统计过程中,经常会遇到缺失值,称为NA,即Not Available。

    R语言中许多函数可以忽略NA值。

    > x <- c(1,2,NA,4) 
    > mean(x)  #有缺失值,无法计算平均值 
    [1] NA

    > mean(x, na.rm=TRUE) #忽略NA值 
    [1] 2.333333

    > mean(c(1,2,NULL,4))   # NULL值会自动略过 
    [1] 2.333333

    > length(c(1,2,NA,4))    #统计个数时NA被计算在内 
    [1] 4

    > length(c(1,2,NULL,4)) 
    [1] 3

    筛选filtering

    有点像索引,因为也是放在[]里,可以把满足一定条件的元素取出来。

    > z <- 1:10 
    > z 
    [1]  1  2  3  4  5  6  7  8  9 10

    > z[z%%2==0] 
    [1]  2  4  6  8 10

    > z%%2    #取模 
    [1] 1 0 1 0 1 0 1 0 1 0

    > z%%2==0    #注意这里的0被自动循环补齐 
    [1] FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE

    > x<-c(1,3,5,6,9) 
    > x[x>3] <- 0   #把大于3的数值都置为0 
    > x 
    [1] 1 3 0 0 0

    subset也是筛选,区别在于处理NA的方式上 
    > x<-c(1,2,NA,4,5) 
    > x[x>3] 
    [1] NA  4  5 
    > subset(x, x>3)    #自动把NA剔除掉了 
    [1] 4 5

    which()可以找到满足条件的元素的位置 
    > x <- c(5,  2,  -3, 9, 1) 
    > x[x*x>8] 
    [1]  5 -3  9 
    > which(x*x>8) 
    [1] 1 3 4

    向量化的ifelse()

    > x <- c(5, 2, -3, 9, 1) 
    > ifelse(x>3, 2*x, 3*x) 
    [1] 10  6 -9 18  3

    判断向量是否相等

    > x <- 1:3 
    > y <- c(1,3,4) 
    > all(x==y) 
    [1] FALSE 
    > identical(x,y) 
    [1] FALSE

    注意1:3是整数,c(1,2,3)是浮点数,它们不相等: 
    > identical(1:3, c(1,2,3)) 
    [1] FALSE 
    > typeof(1:3) 
    [1] "integer" 
    > typeof(c(1,2,3)) 
    [1] "double"

    给向量元素命名names()

    > workdays <- 1:5 
    > names(workdays) <- c("mon", "tue", "wed", "thu", "fri") 
    > workdays 
    mon tue wed thu fri 
      1   2   3   4   5

    可以用名称来引用元素 
    > workdays["wed"] 
    wed 
      3

  • 相关阅读:
    [NOI2018]归程 kruskal重构树
    [NOIP2017]逛公园 最短路图 拓扑序DP
    [bzoj4398] 福慧双修 最短路 二进制分组
    【HDOJ】【4405】Aeroplane chess飞行棋
    【ZOJ】【3329】One Person Game
    【POJ】【2096】Collecting Bugs
    【BZOJ】【3093】【FDU校赛2012】A Famous Game
    【BZOJ】【3143】【HNOI2013】游走
    【UVA】【10828】随机程序
    【UVA】【11762】Race to 1(得到1)
  • 原文地址:https://www.cnblogs.com/awishfullyway/p/6676990.html
Copyright © 2011-2022 走看看