R语言基础编程技巧汇编 - 1

来源:互联网 发布:怎么用数组接收jquery 编辑:程序博客网 时间:2024/05/21 13:57

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.安装Rtoolshttp://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*k1<=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循环的速度还快!

7.       在函数中修改全局变量的值

X <- 0

Fun <- function()

{

X<<-5

}

Fun()

X

[1]5

 

当然,尽量不要这样做,会让程序变得难以维护。

8.       计算向量的值(长度)

sqrt(sum(x*x))   
或者
sqrt(sum(x^2))

 

9.       查C语言函数的源代码

比如对于length函数,会显示下列信息:

.Primitive("length")

 

.Primitive .Internal的函数通常都是 C语言写成的,所以在R的开发环境中中是无法显示的。到网上下载R的源代码,然后在 src/main/*.c (通常位于这个位置)下查找

10. 将数据框转换为矩阵

as.matrix, 如果数据类型都相符,比如:

> t

t1 t2

1 1 2

2 15 33

> aMat<-as.matrix(t)

> aMat

t1 t2

[1,] 1 2

[2,] 15 33

> class(aMat)

[1] "matrix"

 

11. 求卷积

计算卷积的函数,convolve(),具体使用查看帮助即可。

12. 将向量中符合条件的元素都删掉

c<-c(1,1,2,2,3,4,1)

要删除所有的1

c<-c[!c==1]

即可

13. 在图中读出某个点的坐标 

plot(0)

locator()

$x

[1]0.9251036 0.8943020 0.8861963

$y

[1]-0.01747573 -0.15862584 -0.44764750

 

运行以上代码,可以用鼠标在图中点击,然后按Esc键退出,即可返回坐标值。

14. 一张图里画出多种曲线

#The R Book,page-165

library(MASS)

attach(faithful)

x=faithful$eruptions

hist(x,15,freq=FALSE,col=27)

lines(density(x,width=0.6,n=200))

m<-mean(x)

s<-sd(x)

curve(dnorm(x,m,s),col='red',add=TRUE)

 

15. 不带常数项的回归

在后面加一个-1,不加-1为默认的带常数项的回归。例如:

lm(Mileage ~ Weight - 1, data = fuel.frame)

 

建议看formula的资料

0+vars

vars-1

等等表示都是可以的。

2 0