R语言——向量

打印 上一主题 下一主题

主题 1019|帖子 1019|积分 3057

参考资料:学习R
1、向量
        我们可以用冒号运算符 : 来创建某个数到另一个数的数字序列,以及用c函数来拼接数值和向量,以创建更长的向量。总结如下:

        vector函数能创建一个指定范例和长度的矢量。其结果中的值可为0,FALSE,空字符串,或任何相当于“什么都没有”(nothing)的范例:
  1. vector("numeric",5)
  2. vector("complex",5)
  3. vector("logical",5)
  4. vector("character",5)
  5. vector("list",5)
复制代码

        在上例中,NULL是一个特殊的“空”值(不要与代表缺失值的NA肴杂)。为方便起见,我们可以用每个范例的包装(wrapper)函数来创建矢量以节流打字时间。下面的下令与上面代码中的下令是等价的:

(1)序列
        除了冒号运算符之外,另有几个函数能创建更为通用的序列。其中,seq函数最常见,能以许多不同的方式指定序列。实际中,我们可以用三个专门的序列函数:
        seq.int可以创建一个序列,序列的范围由两个数字指定,只需两个参数,原理与冒号运算符完全相同。seq.int轻微比 : 更通用些,由于它可以指定步长。

        由于seq_len函数将创建一个从1到它的输入值的序列,所以用seq_len(5)来表达1:5有些笨拙。不过,当输入值为零时,该函数非常有用:

        seq_along创建一个从1开始、长度为其输入值的序列:
  1. pp<-c("Peter","Piper","picked","a","peck","of","pickled","peppers")
  2. for(i in seq_along(pp)) print(pp[i])
复制代码

(2)长度
        所有向量都有一个长度,它告诉我们向量包含多少个元素。这是个非负整数,我们可以通过length函数查询这个值。缺失值也会被计入长度

        轻易造成肴杂的地方是字符向量。它们的长度为字符串的数目,而非每个字符串中字符数的长度。对此,我们可以利用nchar。

        我们也可以用length为向量重新分配一个长度, 不过很少这么做, 且几近意味着糟糕的代码。 例如, 如果向量的长度缩短, 那么后面的值将会被删除; 而如果长度增加, 则缺失值会添加到末了:
  1. poincare<-c(1,0,0,0,2,0,2,0)
  2. length(poincare)<-3
  3. poincare
  4. length(poincare)<-8
  5. poincare
复制代码

(3)命名
        R向量的一大特性是能给每个元素命名。通常,标记元素可使代码可读性更强。我们可以利用name=value的情势在创建向量时为其指定名称。如果元素的名称是有效的,则无需被引号括起来。我们也可以只命名向量中的某些元素而忽略其他元素;也可以在向量创建后用names函数为元素添加名字;这个names函数也可以用于获取向量的名称;如果向量中没有一个元素有名字,则names函数返回NULL。
  1. x<-1:4
  2. names(x)<-c("apple","banana","kiwi fruit","")
  3. x
  4. names(x)
  5. names(1:4)
复制代码

(4)索引向量
        通常,我们只要访问向量中的部分或个别元素。这就是所谓的索引,它用方括号[]来实现。(有人也称之为子集、下标或切片,这些术语所指相同)。R体系非常灵活,提供如下多种索引方法。
        给向量传入正数,他会返回此位置上的元素切片。它的第一个位置是1
        给向量传入负数,他会返回一个向量切片,它将包含除了这些位置以外的所有元素。
        给向量传入一个逻辑向量,它会返回一个向量切片,里面只包含索引为TRUE的元素。
        对于已命名的向量,给向量传入命名的字符向量,将会返回向量中包含这些名字的元素切片。运行代码如下:
  1. x<-(1:5)^2
  2. x
  3. # 下面三个索引方法都将返回相同的值
  4. x[c(1,3,5)]
  5. x[c(-2,-4)]
  6. x[c(TRUE,FALSE,TRUE,FALSE,TRUE)]
  7. # 如果给每个元素命名,以下方法也将返回相同的值
  8. names(x)<-c("one","two","three","four","five")
  9. x[c("one","three","five")]
  10. # 混合使用正负值是不允许的,会报错
  11. x[c(-1,1)]
  12. # 如果我们用正数或逻辑值作为下标,那么缺失索引所对应的值同样也是缺失值
  13. x[c(1,NA,5)]
  14. x[c(TRUE,FALSE,NA,FALSE,TRUE)]
  15. # 对于负的下标值来说,不允许存在缺失值,会报错
  16. x[c(-2,NA)]
  17. # 超出范围的下标值不会报错,而是返回缺失值NA
  18. x[6]
  19. # 非整数的下标会默认向0舍入
  20. x[1.9]
  21. x[-1.9]
  22. # 不传递任何下标值将返回整个向量
  23. x[]
  24. # which函数将返回逻辑向量中为TRUE的位置。
  25. # 如果要将逻辑索引切换到整个索引中,这个函数很有用
  26. which(x>10)
  27. # which.min是which(min(x))的缩写
  28. # which.max是which(max(x))的缩写
  29. which.min(x)
  30. which.max(x)
  31. x[which.min(x)]
  32. x[which(x>10)]
  33. x[which.max(x)]
复制代码
(5)向量循环和重复
        当我们对不同长度的向量做运算,结果会怎么样?
        如果我们把一个单独的数字与向量相加,则向量的每个元素都会与该数字相加;
        将两个向量相加时,R将会循环较短向量中的元素以配合较长的那个;
        如果长向量的长度不是短向量长度的倍数,则会报错;
  1. #如果我们把一个单独的数字与向量相加,则向量的每个元素都会与该数字相加;
  2. 1:5+1
  3. 1+1:5
  4. #将两个向量相加时,R将会循环较短向量中的元素以配合较长的那个;
  5. 1:5+1:15
  6. #如果长向量的长度不是短向量长度的倍数,则会报错;
  7. 1:5+1:7
复制代码
        

        必须强调的是,虽然我们可以在不同长度的向量之间做运算,但这并不意味着应该如许做。为向量添加一个标量值没有问题,但我们会在其他方面把自己搞晕。最好的做法是明白地创建等长度的向量,然后再对它们进行操纵
        rep函数非常适合此类任务,它答应我们重复利用元向来创建矢量:


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

钜形不锈钢水箱

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表