• R简单算术操作符<函数和+-*/>,缺失值,正则向量,向量运算<索引>(2)


    向量定义时的赋值操作

    x <- c(1,2,3);

    x = c(1,2,3);

    c(1,2,3) -> x;

    assign("x", c(1,2,3));

    这四种形式在大部分时候都能达到一致的效果。推荐使用第一种

     开方  2^3  or 2**3 求2的3次方

    1:10 %/%3 整除

    1:10 %% 3 求余

    1:向量的定义

    一串有序数值构成的数值向量(vector) ,创建一个向量我们使用c(num1,num2,num3);

    在 R 环境里面,单个的数值也是被看作长度为1的向量。 

        1.1 向量的基本运算        

              在算术表达式中使用向量将会对该向量的每一个元素都进行同样算术运算。出现在同一个表达式中的向量最好是长度一致。如果他们的长度不一样,该表达式的值将 是一个和其中最长向量等长的向量。表达式中短的向量会被循环使用(recycled)(可 能是部分的元素)以达到最长向量的长度。对于一个常数就是简单的重复。

             example:   x <- c(1,2,3);

                             y <- c(1,2,3,4,5,6);

                             v <- x + y +1;

             v是由x重复两次的向量,y重复一次的向量,以及1重复6次的向量相加而成

             内部的向量为:(1,2,3,1,2,3)+(1,2,3,4,5,6)+(1,1,1,1,1,1)

              v的结果为:(3,5,7,6,8,10)

        1.2 向量中常用的函数

              maxmin 分别给出一个向量的最大值和最小值。 函数range得到的是一个长度为2的向量,即c(min(x), max(x))。 length(x) 给出向量x 的元素个数, sum(x) 给出x 中元素的累加和, 而prod(x) 则得到它们的乘积 ,     

         注意:max 和min 将会给出它们参数向量中的最大和最小值。在同时给予多个参数 向量的情况下,这两个函数会把参数向量合并成一个向量处理 。

              example:利用上例的变量x , y .则max(x,y)等价于max(c(x,y));返回一个最大值参数 6.

             两个统计函数就是计算均值的mean(x) (等价于sum(x)/length(x)) 和计算样本方差的var(x) =sum((x-mean(x))^2)/(length(x)-1)

         当x是一个n*p的矩阵时,var计算的结果则为p维的协方差矩阵,相关定义见http://www.cnblogs.com/chaosimple/p/3182157.html

              协方差计算的是两列之间的相关性。     

              R 环境内部的计算是以双精度的实数或者双精度的复数(在输入数据是复数的 情况下)实现的。 如果要处理复数,应该给出明确的复数部分.例如sqrt(-10+0i);

        1.3 生成正则数列  

             R中冒号:的优先级最高

             example :   n <- 5   5

                              n <- 1:5-1   0,1,2,3,4

             n <- 1:(5-1)    1,2,3,4

             seq函数也能达到同样的效果,其中还有步长等相关设置

             example: seq(from=1, to=10, by=2)         result=1  3  5 7  9                                      

                           seq(from=10, to=1, by=-2)        result=10  8  6  4  2        

                           seq(from=1, length=5, by=2)         result=1  3  5 7  9      

            重复对象我们使用rep函数

             example:  res_rep <- rep(x,times=2)        result = 1 2 3 1 2 3

                            res_rep <- rep(x,each=2)         result =1 1 2 2 3 3

          1.4 逻辑运算符

               c1 <- x<2   c1 = TURE FALSE FALSE

               c2 <- x>0   c2 = TURE TURE TURE

               c1&c2 交集:TURE FALSE FALSE

               c1|c2 并集:TURE TURE TURE

          1.5 缺失值

               在某些情况下,向量的元素可能有残缺。当一个元素或者值在统计的时候“不可得到”(not available)或者“值丢失” (missing value),

         相关位置可能会被保留并且赋予一个特定的值NA任何含有NA 数据的运算结果都将是NA 。为了判断一个向量中是否有NA,我们使用is.na(x).

          example x<-(c(1:3), NA)    is.na(x) 的结果则为 FALSE FALSE FALSE TURE

              我们不能用逻辑 == 来判断,因为NA本来就代表的是不确定,所以我们也不知道这个不确定的指是不是等于我们要判断的指。

              数值计算会产生第二种“缺损”值,也称为非数值(Not a Number)NaN 。

           example x<- 0/0;  x的值为NaN

          1.6 字符向量(我去几个~~~这么凌乱的符号是几个意思- -!)

                nth <- paste0(1:8, c("st", "nd", "rd", rep("th", 5)))

          paste0的工作方式是,如果有两个向量,则按照其在括号参数中的先后顺序两两进行拼接,若长度不一致,则短的向量会进行循环。

        

         索引向量可以写在赋值操作的两端

                 如果一个表达式的结果是向量,则我们可以直接在表达式的末尾方括号中加入索引向量以得到结果向量的子向量

              一: 以逻辑向量为索引向量

                   逻辑向量为TURE的值将会被取出并存入新的向量。   

                   examplex:  取出indexF中的非NA数值。

                 indexF <- rep(c(1:3,NA), times=3);

                                    indexT <- indexF[!is.na(indexF)]

              二: 正整数索引

          这种索引是将指定元素被包括。

                    x <- c(1:10);

            x[4]                 result=  4

            x[1:5]              result= 1 2 3 4 5

              x[rep(c(1:2), times=4)]     result=   1 2 1 2 1 2 1 2

             三:负整数索引

           这种索引是将指定元素被排除。

                x <- 1:10

                y <- x[-(1:5)]   result= 6 7 8 9 10

                正数和负数索引不能混合放置使用。

            四:采用名称进行索引

               color <- c(1,2,3)

               names(color) <-c("red","green","blue");

               choice <- color["red"]   choice等于1

           五:写在赋值操作的左端        

               写在赋值操作的左端时,右端的内容只会对左端索引的内存发生作用。

               x[is.na(x)] <- 0; 将x中的na全部替换为0值。

  • 相关阅读:
    C++类继承内存布局(二)
    C++类继承内存布局(一)
    排序算法
    python 文件路径问题
    python map对象
    python reduce() 函数
    python eval 用法
    PyCharm引入自定义类报错
    Python中的lambda的简单介绍
    python time模块和datetime模块
  • 原文地址:https://www.cnblogs.com/yican/p/4548825.html
Copyright © 2020-2023  润新知