在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
向量是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 循环补齐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) seq(from=1.1, to=2, length=10) x <- c(1,2,4,8) seq(1,5)与1:5是一个意思 rep重复向量常数rep(8, 4) rep(1:3, 2) rep(1:3, each=2) all()和any()x<-(1:10) 向量化w <- function(x) return (x+1) #加号运算符支持向量,所以自定义的函数w也是向量化的!看上去简单的x+1,但我们已经写出了一个向量函数 w(1) #这是我们最熟悉的函数调用 w(c(1,3,5)) #可以对向量进行运算 NA与NULL在统计过程中,经常会遇到缺失值,称为NA,即Not Available。 R语言中许多函数可以忽略NA值。 > x <- c(1,2,NA,4) > mean(x, na.rm=TRUE) #忽略NA值 > mean(c(1,2,NULL,4)) # NULL值会自动略过 > length(c(1,2,NA,4)) #统计个数时NA被计算在内 > length(c(1,2,NULL,4)) 筛选filtering有点像索引,因为也是放在[]里,可以把满足一定条件的元素取出来。 > z <- 1:10 > z[z%%2==0] > z%%2 #取模 > z%%2==0 #注意这里的0被自动循环补齐 > x<-c(1,3,5,6,9) subset也是筛选,区别在于处理NA的方式上 which()可以找到满足条件的元素的位置 向量化的ifelse()> x <- c(5, 2, -3, 9, 1) 判断向量是否相等> x <- 1:3 注意1:3是整数,c(1,2,3)是浮点数,它们不相等: 给向量元素命名names()> workdays <- 1:5 可以用名称来引用元素 |
请发表评论