美文网首页R语言
R语言编程艺术 第2章 向量(上)

R语言编程艺术 第2章 向量(上)

作者: 小洁忘了怎么分身 | 来源:发表于2019-01-25 23:53 被阅读4次

    2.1 标量、向量、数组与矩阵

    向量长度:length()
    矩阵、数组本质上是向量。

    2.2 声明

    变量可以直接赋值,无需提前生命,但是不可以直接引用向量中的元素,即不可以突然冒出y[2]。

    2.3 循环补齐

    在对两个向量使用运算符时,如果要求这两个向量具有相同的长度,R会自动循环补齐(recycle),即重复较短的向量,直到它与另一个向量长度相匹配。
    例子:


    矩阵也是循环补齐的:

    2.4 常用的向量运算

    向量运算,是两个向量对应位置的子元素逐一运算。
    向量索引,取子集操作x[c(1,3)]
    创建向量:
    “:”生成指定范围内数值构成的向量。
    seq()(由sequence得来),用来生成等差序列
    rep()重复向量常数,参数times指定整体重复次数,each指定每个元素重复次数。

    2.5 使用all()和any()

    any() 和all() 函数分别报告其参数是否至少有一个或全部为TRUE,返回逻辑值。
    扩展案例:寻找连续出现1 的游程

    findruns <- function(x,k) {
       n <- length(x)
       runs <- NULL
       for (i in 1:(n-k+1)) {
          if (all(x[i:(i+k-1)]==1)) runs <- c(runs,i)
       }
       return(runs)
    }
    

    为提高运算速度,预先分配内存空间

    findruns1 <- function(x,k) {
       n <- length(x)
       runs <- vector(length=n)
       count <- 0
       for (i in 1:(n-k+1)) {
          if (all(x[i:(i+k-1)]==1)) {
             count <- count + 1
             runs[count] <- i
          }
       }
       if (count > 0) {
          runs <- runs[1:count]
       } else runs <- NULL
       return(runs)
    }
    
    

    2.6 向量化运算符

    多数函数是向量输入,向量输出。sapply可实现向量输入,矩阵输出。如果要把输入限制为标量:

     function(x,c) {
      if (length(c)!=1) stop("vector c not allowed")
      return((x+c)^2)
    }
    

    相关文章

      网友评论

        本文标题:R语言编程艺术 第2章 向量(上)

        本文链接:https://www.haomeiwen.com/subject/svlbjqtx.html