R语言编程入门之向量化运算
当前位置:以往代写 > 其他教程 >R语言编程入门之向量化运算
2019-06-14

R语言编程入门之向量化运算

R语言编程入门之向量化运算

和matlab一样,R语言以向量为根基运算工具。也就是说,当输入的工具为向量时,对个中的每个元素别离举办处理惩罚,然后以向量的形式输出。R语言中根基上所有的数据运算均能答允向量操纵。不只如此,R还包括了很多高效的向量运算函数,这也是它差异于其它软件的一个显著特征。向量化运算的长处在于制止利用轮回,使代码更为简捷、高效和易于领略。本文来对apply族函数作一个简朴的归纳,以便于各人领略个中的区别地址。

所谓apply族函数包罗了apply,sapply,lappy,tapply等函数,这些函数在差异的环境下能高效的完成巨大的数据处理惩罚任务,但脚色定位又有所差异。

apply()函数的处理惩罚工具是矩阵或数组,它逐行或逐列的处理惩罚数据,其输出的功效将是一个向量或是矩阵。下面的例子即对一个随机矩阵求每一行的均值。要留意的是apply与其它函数差异,它并不能明明改进计较效率,因为它自己内置为轮回运算。

m.data <- matrix(rnorm(100),ncol=10)
apply(m.data,1,mean)

lappy()的处理惩罚工具是向量、列表或其它工具,它将向量中的每个元素作为参数,输入处处理惩罚函数中,最后生成功效的名目为列表。在R中数据框是一种非凡的列表,所以数据框的列也将作为函数的处理惩罚工具。下面的例子即对一个数据框按列来计较中位数与尺度差。
f.data <- data.frame(x=rnorm(10),y=runif(10))
lapply(f.data,FUN=function(x) list(median=median(x),sd=sd(x)))


sapply()大概是利用更为频繁的向量化函数了,它和lappy()长短常相似的,但其输格外式则是较为友好的矩阵名目。
sapply(f.data,FUN=function(x) list(median=median(x),sd=sd(x)))
class(test)


tapply()的成果则又有差异,它是专门用来处理惩罚分组数据的,其参数要比sapply多一个。我们以iris数据集为例,可调查到Species列中存放了三种花的名称,我们的目标是要计较三种花瓣萼片宽度的均值。其输出功效是数组名目。

head(iris)
attach(iris)
tapply(Sepal.Width,INDEX=Species,FUN=mean)

与tapply成果很是相似的尚有aggregate(),其输出是更为友好的数据框名目。而by()和上面两个函数是同门师兄弟。

别的尚有一个很是有用的函数replicate(),它可以将某个函数反复运行N次,经常用来生成较巨大的随机数。下面的例子即先成立一个函数,模仿扔两个骰子的点数之和,然后反复运行10000次。
game <- function() {
    n <- sample(1:6,2,replace=T)
return(sum(n))
}
replicate(n=10000,game())
最后一个有趣的函数Vectorize(),它能将一个不能举办向量化运算的函数举办转化,使之具备向量化运算成果。

    关键字:

在线提交作业