登录
首页精彩阅读R语言编程基础篇(1)
R语言编程基础篇(1)
2015-09-17
收藏

R语言编程基础篇(1)



1. 建立多维数组

array(1:36, dim = c(2, 2, 3, 3))

2. 使用list.files函数遍历文件夹中的文件

比如列出当前工作目录下的所有文件

list.files(getwd())

[1] "1.pdf" "10plots.pdf"

[3] "140408696.txt" "1plots.pdf"

[5] "2plots.pdf" "3plots.pdf"

还可以设置正则表达式来过滤文件

列出当前工作目录下所有的R语言源代码文件

list.files(getwd(),pattern = '*.[R|r]$')

[1] "Ask.R" "gg.R"

3. 用sciplot包的画boxplot图

#加载数据

library(MASS)

cab<-data.frame(cabbages)

cab[1,]

library(sciplot)

bargraph.CI(Cult, HeadWt, group =Date , data =cab,

xlab = NA, ylab = NA, cex.lab = 1.5, x.leg = 1,

col = "black", angle = 45, cex.names = 1.25,

density = c(0,20,100), legend = TRUE,ylim=c(0,5))

box()

bargraph.CI(Date,HeadWt, group =Cult , data =cab,

xlab = NA, ylab = NA, cex.lab = 1.5, x.leg = 1,

col = "black", angle = 45, cex.names = 1.25,

density = c(0,20), legend = TRUE,ylim=c(0,5))

box()

在这个boxplot中,不用自己计算均值和误差,也不用自己调整数据结构,不用转化为matrix,很方便。

4. 多系列图

x<-seq(from = 1,to = 9,by =2)

y<-seq(from = 2,to = 10,by= 2)

barplot(rbind(x,y),beside=T,col=heat.colors(2))

5. 应该注意避免使用的变量名

R语言中预定义了大量函数,有些函数名相当简单,比如c()函数,根据本人的实践经验,应该避免使用过于简单的变量名,以免与R语言已有名称冲突,而出现意想不到的错误。自己取变量名字是,最好能加上自己的一些特征,比如公司缩写,比如本人公司首字母缩写为MS,则本人使用的变量名都以MS开头,然后接下划线,比如MS_Alarm,MS_Books等等。

以下是尽量应该避免使用的变量名:

单个字符:a,b,c,d,…,x,y,z,A,B,…,X,Y,Z,

已经被R语言使用的名字:data,names,dim,seq,…

另外,命名新变量时,应该先检查一下变量名是否已经存在。

可以使用get()函数查询变量名,看是否有返回值。

6. Windows环境下,R语言调用C语言库

1.安装Rtools,http://www.murdoch-sutherland.com/Rtools/Rtools.exe这个在写R包时要用,当然这里不会提到。

2.配置环境变量,“我的电脑”–>“属性”–>“高级”–>“环境变量”–>“系统变量”–>PATH,在后面添加:D:\Rtools\bin; D:\Rtools\perl\bin;D:\Rtools\MinGW\bin;D:\R-2.8.1\bin(前三个取决于Rtools的安装位置,最后一个取决于R安装的位置)

3.编写C代码(命名为fac3.c),下面程序得到i*j*k(1<=i,j, k<=n)的和,注意:参数必须用指针表示(对应R中的向量),且编写的C函数不能有显式返回值,即函数返回要声明为void;(参见http://www.wentrue.net/blog/?p=72,该文是在linux下的。)

voidfac3(double *n, double *m){

*m=0;

int i,j,k;

for(i=1;i<=*n;i++){

for(j=1;j<=*n;j++){

for(k=1;k<=*n;k++){

*m=*m+i*j*k;

}

}

}

}

4.编译C,在DOS中(fac3.c所在的文件夹下)输入RCMD SHLIB fac3.c

即可得到.dll文件

5.R中调用,并与R做循环的速度进行比较

dyn.load("fac3.dll")

system.time(out<-.C("fac3",a=1000,b=1))#第一个参数对应C中的函数名

我的老机上运行时间:

user system elapsed

6.67 0.00 6.81

再看看R中的速度

n= 100

m= 0

system.time(for (iin1:n) {

for (jin1:n) {

for (kin1:n) {

m = m + i * j * k

}

}

})

user system elapsed

7.34 0.00 7.44

通过比较可以发现,调用的C做了1000^3次循环比R中做了100^3循环的速度还快!


数据分析咨询请扫描二维码

客服在线
立即咨询