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.安装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循环的速度还快!
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
等等表示都是可以的。
- R语言基础编程技巧汇编 - 1
- R语言基础编程技巧汇编-前言
- R语言基础编程技巧汇编 - 2
- R语言基础编程技巧汇编 - 3
- R语言基础编程技巧汇编 - 4
- R语言基础编程技巧汇编 - 5
- R语言基础编程技巧汇编 - 6
- R语言基础编程技巧汇编 - 7
- R语言基础编程技巧汇编 - 8
- R语言基础编程技巧汇编 - 9
- R语言基础编程技巧汇编 - 10
- R语言基础编程技巧汇编 - 11
- R语言基础编程技巧汇编 - 12
- R语言基础编程技巧汇编 - 13
- R语言基础编程技巧汇编 - 14
- R语言基础编程技巧汇编 - 15
- R语言基础编程技巧汇编 - 16
- R语言基础编程技巧汇编 - 17
- 在Activity的onCreate方法中获取View的width和height
- 策略模式Strategy(对象行为型)
- windows常用命令
- selenium + python 自动化测试
- 关于linux下位于root组的用户并没有root权限的问题
- R语言基础编程技巧汇编 - 1
- android服务监听电话
- 被误传了数千年的四大成语 相濡以沫 女子与小人难养也 无度不丈夫 以德抱怨
- Apache Spark技术实战之6 -- spark-submit常见问题及其解决
- 解决Win7下VC++6.0不能直接打开多个工程的问题
- 武汉大学生经常找武汉草莓音乐节兼职的兼职信息平台。
- asp.net之panel的一次使用
- IOS 事件处理
- 记录心情一