1.R向量元素的索引(下标)是从1开始的,而非0
- >x
- [1] 1 2 4
-
- >x[3]
- [1] 4
2.[]和[ [ ] ]
- mylist<-list(stud.id=1234,
- + stud.name="Tom",
- + stud.marks=c(10,3,14,25,19))
- > mylist
- $stud.id
- [1] 1234
-
- $stud.name
- [1] "Tom"
-
- $stud.marks
- [1] 10 3 14 25 19
-
- mylist[[1]]
- #输出
- [1] 1234
- mylist[1]
- #输出
- $stud.id
- [1]1234
-
- mode(mylist[[1]])
- #输出
- [1] "numeric"
-
- mode(mylist[1])
- #输出
- [1] "list"
mylist[[1]]
列表的第一个组件的值
类型为”numeric“
mylist[1]
第一个成分的子列表
类型为“list”
3.标量和一元向量
标量是只包含一个单一数值的数据类型,而长度为一的向量是包含一个元素的向量。
- # 标量
- x <- 5
-
- # 长度为一的向量
- y <- c(5)
-
- 通常情况下,标量可以被看作一元向量
-
- # 标量
- x <- 5
-
- # 长度为一的向量
- y <- c(5)
-
- # 进行乘法运算
- result1 <- x * x
- result2 <- y * y
-
- # 输出结果
- print(result1)
- print(result2)
-
- [1] 25
- [1] 25
-
- #注意:使用向量化的运算符会使得函数也向量化
- #这也适用于很多内置函数,例如round()
- > y<-c(1.2,3.9,0.4)
- > z<-round(y)
- > z
- [1] 1 4 0
- #round()函数能应用到向量y的每一个元素中,标量实际上就是一元向量,所以对单个数值使用round()函数,只是一种特殊情况
- round(1.2)
- [1] 1
-
- #诸如+这样的运算符实际也是函数
- > y<-c(12,5,13)
- > y+4
- [1] 16 9 17
- 这样写更加明显
-
-
- > '+'(y+4)
- [1] 16 9 17
- #在这里我们定义f(),我们希望c是标量,但实际上,他是一个长度为1的向量
- #即使我们调用f()时给c指定的是单个数值,在f()计算x+c时,他也会通过循环补齐的方式延展为一个向量。
- > f<-function(x,c){
- + return ((x+c)^2)
- + }
- > f(1:3,0)
- [1] 1 4 9
-
- #这意味着f()可以使用显式的向量给c赋值
- f(1:3,1:3)
- [1] 4 16 36
-
- 如果想把c限制为1个标量
- > f<-function(x,c){
- + if(length(c)!=1)
- + stop("vector c not allowed")
- + return((x+c)^2)
- + }
由以上例子可以总结出以下结论
1.使用向量化的运算符会使得函数也向量化
2. 内置函数和运算符号都可以实现向量化操作,运算符其实是一种函数,这种将运算符作为函数使用的方式被称为函数调用运算符。
内容持续更新中~💖💖💖💖